0

我有一个简短的函数,可以计算所有素数的总和,直到一个限制。这是上下文的完整代码:

def primes_sum(limit):
    limitn = limit+1
    not_prime = [False] * limitn
    primes = []

    for i in range(2, limitn):
        if not_prime[i]:
            continue
        for f in xrange(i*2, limitn, i):
            not_prime[f] = True

        primes.append(i)

    return sum(primes)

其中大部分对我来说很有意义,但我不明白这部分:

not_prime = [False] * limitn

这样做的具体目的是什么?它是如何工作的,它如何确定一个数字是否是素数?我已经尝试查找它,但我找不到答案。

提前致谢。

4

3 回答 3

3

您只是在创建一个list长度limitn,并将其所有元素初始化为False.

*是重复运算符。当应用于Listintegern作为right操作数的 a 时,它会重复list n次数。

您也可以在字符串上使用它:

>>> [False] * 2
[False, False]
>>> "rohit" * 2
rohitrohit
于 2013-02-19T16:40:15.047 回答
1

它初始化一个limitn False值列表。例如:

>>> [False]*3
[False, False, False]

基本上它可以防止你IndexError以后得到。

于 2013-02-19T16:40:16.117 回答
0

[False]*n用 n 个全部为 False 的元素初始化列表。当您预先知道列表将包含多少元素时,这种初始化方式通常用作一种优化方式——它比使用 .append() 添加元素快得多。

于 2013-02-19T16:56:47.673 回答