我有一个简短的函数,可以计算所有素数之和达到一个极限。以下是上下文的完整代码:
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
这到底是什么意思?它是如何工作的,它如何判断一个数字是否是素数?我试过看,但我找不到答案。
提前致谢。
答案 0 :(得分:3)
您只需创建list
长limitn
,其所有元素都已初始化为False
。
*
是重复运算符。在List
上使用integer
值n
作为right
操作数时,它会重复list
n
次。
您也可以在字符串上使用它:
>>> [False] * 2
[False, False]
>>> "rohit" * 2
rohitrohit
答案 1 :(得分:1)
初始化limitn
False
值列表。 e.g:
>>> [False]*3
[False, False, False]
基本上它会阻止您稍后获得IndexError
。
答案 2 :(得分:0)
[False]*n
使用n个元素初始化列表,这些元素都是False。当你知道预先列出多少元素时,这种初始化方法通常被用作优化方式 - 它比使用.append()添加元素更快 。