Python修改错误列表?

Non*_*biz 1 python primes list nested-loops

我正在尝试使用方法生成素数列表.我需要遍历每个数字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
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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'
Run Code Online (Sandbox Code Playgroud)

mip*_*adi 7

你没有制作副本.你正在使用引用,所以copy1,copy2copy3所有引用相同的列表 - sieve.如果要复制,请使用:

copy1 = sieve[:]
Run Code Online (Sandbox Code Playgroud)

这将创建一个副本sieve并将其分配给copy1.

  • 这种混乱是如此常见......语言上的所有材料(以及具有类似语义的所有语言,顺便说一句)应该包含一个巨大的红色框,其中包含此摘要. (4认同)
  • delnan:另外,描述浮点运算如何工作.:-) (2认同)