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
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