如果你想按位计算,你也可以使用。
if len(mylist)&1:
print("odd")
else:
print("even")
如果你知道你的列表很可能是奇怪的,这真的很好看。
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")
通过低于 %2 的测试在 python 中哇是更快。 python必须针对它进行优化。在其他一些语言中 & 1 更快。这就是为什么总是测试很重要的原因。
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))
测试结果。
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