这是我的密码:
def f(x): return x%2!=0 and x%3!=0
primes = filter(f , range (6,50))
for x in primes:
for a in filter(f, range(2,x-1)):
if x%a == 0:
primes.remove(x);
print(primes)
我得到这个错误:
File "primes.py", line 12, in <module>
primes.remove(x);
ValueError: list.remove(x): x not in list
但有趣的是如果我这样写:
def f(x): return x%2!=0 and x%3
primes = filter(f , range (6,20))
for x in primes:
for a in filter(f, range(2,x-1)):
if x%a == 0:
primes.remove(x);
print(primes)
为什么?我该怎么修?你知道吗
让我们输入一些打印语句,看看发生了什么:
因此,您的问题是,您两次生成了数字35(第二次出现异常,因为第一次删除后它就不在了!)你知道吗
让我们看看结果:
这里的值是35,也就是5*7。在嵌套循环中,当
a
为5时,满足条件并从primes
列表中删除35;当a
变为7时,再次满足条件,但这次已删除35,因此引发异常。你知道吗所以一个简单的固定是像下面的一个。使
x
在第一次满足条件时仅被移除一次:但现在它将跳过非素数后面的元素,如列表中的95:
这是通过制作
primes
片来修复的:相关问题 更多 >
编程相关推荐