我已经阅读了以下问题: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
谁能告诉我为什么?
答案 0 :(得分:0)
好的,正如furas所说,这是花费很多时间的时间:
import timeit
count = 1000
def countPrimes(n=100000):
primes = [True] * n
return sum(primes)
def countPrimes2(n=100000):
primes = [1] * n
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 2.4546820300165564
use 0,1 1.0242620470235124
没有总和:
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
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
print('use False,True ', timeit.timeit(countPrimes, number=count))
print('use 0,1 ', timeit.timeit(countPrimes2, number=count))
结果是:
-> % python3 test.py
use False,True 8.47771276300773
use 0,1 8.44074950099457
时间几乎相同