for 循环遍历一个长列表。我试图加速修改列表的迭代(没有成功)。编码:
from math import sqrt
def holeofStrainer():
isPrime = [False, False] + [True]*999999
for num in range(3, len(isPrime)):
if isPrime[num] == False:
continue
else:
for x in range(2, int(sqrt(num)) + 1):
if num % x == 0:
isPrime[num] = False
break
else:
isPrime[num] = True
for item in range (2, int(1000001/num) + 2):
ple = item * num
if ple < len(isPrime):
isPrime[ple] = False
return(isPrime)
print(holeofStrainer())
第5 行的目标是避免不必要的计算。
在第 14-17 行中,我进行了修改(按照 Eratosthenes 的筛选,我将素数的倍数的值更改为 False)通过这种方式避免通过第 5 行进行更多计算。
概括:
- 是否可以从循环本身修改循环迭代列表?
- 如果答案是肯定的,为什么我的代码不好?