Skip to main content
 首页 » 编程设计

Python修改错误列表

2025年05月04日11me-sa

我正在尝试使用 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。