How to know if a list has an even or odd number of elements

后端 未结 8 2008
离开以前
离开以前 2021-01-28 01:20

How can I find out if there is even, or odd, number of elements in an arbitrary list.

I tried list.index() to get all of the indices... but I still don\'t k

8条回答
  •  感情败类
    2021-01-28 02:12

    if you want to be bitwise about it you could also use.

    if len(mylist)&1:
        print("odd")
    else:
        print("even")
    

    this is really Nice looking if you know your list is more likely to be odd.

    if len(mylist)&1:
        print("list was odd")
    elif CheckSomthingElse():
        print("list was even AND CheckSomthingElse was True")
    else:
        print("list was even AND CheckSomthingElse was False")
    

    Wow in python by the test below % 2 is faster. python must be optimized for it. in some other languages & 1 is faster. this is why it's important to always test.

    import timeit
    
    MyListOdd=[1,2,3,4,5,6,7]
    MyListEven=[1,2,3,4,5,6]
    print("MyListOdd  == ",MyListOdd)
    print("MyListEven == ",MyListEven)
    print("len(MyListOdd)  == ",len(MyListOdd))
    print("len(MyListEven) == ",len(MyListEven))
    
    def TestIfEvenBitwise(MyList):
        if len(MyList)&1:
            return False #Odd
        else:
            return True #Even
    
    def TestIfEvenModulus(MyList):
        if len(MyList)%2:
            return False #Odd
        else:
            return True #Even
    
    print("TestIfEvenBitwise(MyListOdd)  == ",TestIfEvenBitwise(MyListOdd))
    print("TestIfEvenModulus(MyListOdd)  == ",TestIfEvenModulus(MyListOdd))
    print("TestIfEvenBitwise(MyListEven) == ",TestIfEvenBitwise(MyListEven))
    print("TestIfEvenModulus(MyListEven) == ",TestIfEvenModulus(MyListEven))
    
    mysetup = """
    MyListOdd=[1,2,3,4,5,6,7]
    MyListEven=[1,2,3,4,5,6]
    
    def TestIfEvenBitwise(MyList):
        if len(MyList)&1:
            return False #Odd
        else:
            return True #Even
    
    def TestIfEvenModulus(MyList):
        if len(MyList)%2:
            return False #Odd
        else:
            return True #Even
    """
    
    print("timeit.timeit(setup = mysetup,stmt ='TestIfEvenBitwise(MyListOdd)', number=100000) == ",
          timeit.timeit(setup = mysetup,stmt ='TestIfEvenBitwise(MyListOdd)', number=100000))
    print("timeit.timeit(setup = mysetup,stmt ='TestIfEvenModulus(MyListOdd)', number=100000) == ",
          timeit.timeit(setup = mysetup,stmt ='TestIfEvenModulus(MyListOdd)', number=100000))
    print("timeit.timeit(setup = mysetup,stmt ='TestIfEvenBitwise(MyListEven)', number=100000) == ",
          timeit.timeit(setup = mysetup,stmt ='TestIfEvenBitwise(MyListEven)', number=100000))
    print("timeit.timeit(setup = mysetup,stmt ='TestIfEvenModulus(MyListEven)', number=100000) == ",
          timeit.timeit(setup = mysetup,stmt ='TestIfEvenModulus(MyListEven)', number=100000))
    

    results of test.

    MyListOdd  ==  [1, 2, 3, 4, 5, 6, 7]
    MyListEven ==  [1, 2, 3, 4, 5, 6]
    len(MyListOdd)  ==  7
    len(MyListEven) ==  6
    TestIfEvenBitwise(MyListOdd)  ==  False
    TestIfEvenModulus(MyListOdd)  ==  False
    TestIfEvenBitwise(MyListEven) ==  True
    TestIfEvenModulus(MyListEven) ==  True
    timeit.timeit(setup = mysetup,stmt ='TestIfEvenBitwise(MyListOdd)', number=100000) ==  0.02574796500000004
    timeit.timeit(setup = mysetup,stmt ='TestIfEvenModulus(MyListOdd)', number=100000) ==  0.022446242000000005
    timeit.timeit(setup = mysetup,stmt ='TestIfEvenBitwise(MyListEven)', number=100000) ==  0.026081517000000054
    timeit.timeit(setup = mysetup,stmt ='TestIfEvenModulus(MyListEven)', number=100000) ==  0.025758655999999935
    

提交回复
热议问题