为什么在Python3中使用True比使用1慢

时间:2019-09-08 02:37:35

标签: python python-3.x

我已经阅读了以下问题: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

谁能告诉我为什么?

1 个答案:

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

时间几乎相同