编辑:已解决,我只是想错了,函数从未达到大于n的数字的第二次返回,因此这里不需要任何人阅读它。
我知道这是“重复” - 但并非完全如此。 目前我正在使用Python 3.6.2
我生成一个素数列表,然后想要复制它,所以我可以修改它以找到一个特定的素数并返回素数列表。
我试过了:
new_list = old_list[:]
new_list = list(old_list)
new_list = old_list * 1
new_list = old_list.copy()
new_list = [char for char in old_list]
但没有那些工作。在我的代码中,我将素数列表简化为一个整数,然后返回数字和列表。但是,无论使用何种方法,对old_list进行的所有修改都将在new_list中完成。
有问题的代码:
def f(n):
#generate primelist
primes = []
numbers = set(range(n,1,-1))
while numbers:
p = numbers.pop()
primes.append(p)
numbers.difference_update(set(range(p*2,n+1,p)))
#any of these, none work
primelist = primes[:]
primelist = primes * 1
primelist = primes.copy()
primelist = list(primes)
primelist = [char for char in primes]
#find even digits
import re
evendigs = re.compile(r'[24680]')
longest = []
prime = 0
#remove n from primes if n is prime
if n in primes:
primes.remove(n)
#find largest prime with maximum number of even digits that is smaller than n
for i in list(reversed(primes)):
if len(str(prime))> len(str(i)):
return prime
evenprime = re.findall(evendigs,str(i))
if evenprime:
if len(evenprime)>len(longest):
longest = evenprime
prime = i
elif len(evenprime)==len(longest):
longest = evenprime
if i > prime:
prime = i
else: continue
return (primelist, primes)
也是为什么:
a,b = f(9451)引发错误:int对象不可迭代?
假设我只返回例如primelist(应该是最多n个素数列表):
number = f(9451)但a = 8243且a不是列表
返回素数(应该是数字,即使数字错误),也会给出相同的值。
答案 0 :(得分:2)
您的代码中存在问题:
考虑这个例子:
>> l = [1, 2, 3]
>> m = l
>> n = l[:]
>> l.append(4)
>> l
[1, 2, 3, 4]
>> m
[1, 2, 3, 4]
>> n
[1, 2, 3]
大多数(如果不是全部)示例都应该制作副本,尽管在大多数情况下都是浅色副本。
返回您的代码:
#remove n from primelist if n is prime
if n in primes:
primes.remove(n)
这不符合评论的意思。
这应该是
if n in primes:
primelist.remove(n)
答案 1 :(得分:-1)
我也遇到过类似的问题。 尝试将现有列表复制到另一个列表,然后开始操作第二个列表。 它可以通过。
list2 = [x for x in list1]
您现在可以在list2中进行更改而不会影响list1
答案 2 :(得分:-1)
因为您尝试所有获取新列表的方式是旧列表的副本,而不是新列表,您可以尝试这样做:
newlist = []
for tmp in oldlist:
newlist.append(tmp)
答案 3 :(得分:-3)
你可以尝试
newList = oldList[:]
我做了什么,它确实复制了这份清单。它主要是你的代码,你的复制部分是好的。
def f(n):
primes = []
numbers = set(range(n, 1, -1))
while numbers:
p = numbers.pop()
primes.append(p)
numbers.difference_update(set(range(p * 2, n + 1, p)))
primelist = primes[:]
primes.append(50)
print(primes)
print(primelist)
def main():
f(100)
if __name__ == "__main__":
main()