我正在尝试使用 this 生成素数列表方法。我需要遍历每个数字 2...n 并检查它是否为 2...n 的倍数。出于某种原因,错误的列表似乎正在被修改。
import sys
import argparse
import math
parser = argparse.ArgumentParser(description='find the largest prime factor of a number')
parser.add_argument('n', type=int, help='number')
args = parser.parse_args()
sieve = []
for i in range(2,args.n+1): sieve.append(i) # tried int(i)
copy1 = sieve # tried making extra copies. . .
copy2 = sieve
copy3 = sieve
#print int(math.sqrt(args.n))
for index, i in enumerate(copy1):
#print index, i
for ii in copy2:
#print ii
if i % ii == 0:
sieve[index]= None
print sieve
我收到以下错误:
Traceback (most recent call last):
File "3.py", line 22, in <module>
if i % ii == 0: TypeError: unsupported operand type(s) for %:
'int' and 'str'
请您参考如下方法:
你不是在复制。您正在使用引用,因此 copy1、copy2 和 copy3 都引用同一个列表 -- sieve .如果要复制,请使用:
copy1 = sieve[:]
这将创建 sieve 的副本并将其分配给 copy1。
