我正在尝试使用 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
。
关于Python修改错误列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4337106/