【发布时间】:2020-01-10 07:44:33
【问题描述】:
我读过这个问题:Why is if True slower than if 1?,但我现在使用的是 Python3。我正在写 leetcode 204,有人说用一个比用两个快。
我的代码:
import timeit
count = 1000
def countPrimes(n=100000):
if n < 3:
return 0
primes = [True] * n
primes[0], primes[1] = False, False
for i in range(2, int(n ** 0.5) + 1):
if primes[i]:
for j in range(i * i, n, i):
primes[j] = False
return sum(primes)
def countPrimes2(n=100000):
if n < 3:
return 0
primes = [1] * n
primes[0], primes[1] = 0, 0
for i in range(2, int(n ** 0.5) + 1):
if primes[i]:
for j in range(i * i, n, i):
primes[j] = 0
return sum(primes)
print('use False,True ', timeit.timeit(countPrimes, number=count))
print('use 0,1 ', timeit.timeit(countPrimes2, number=count))
结果是:
-> % python3 test.py
use False,True 10.634566191001795
use 0,1 9.187052419991232
谁能告诉我为什么?
【问题讨论】:
-
可能是因为
sum(primes)必须将所有True/False转换为0/1? -
同意弗拉斯。这可能取决于您的机器等,但仅转换就会产生超过 1 毫秒的时间差。其余的我建议调试特定的功能。
标签: python python-3.x