ggo*_*don 1 python primes loops list
我想写一个程序,它从素数列表中删除包含偶数位的所有素数.
任何人都可以解释为什么这个代码返回正确的结果如果limit = 200,但如果limit = 300则返回错误?
def odd_primes(limit):
r = list(gen_primes(limit))
for i in r[:]:
for j in str(i):
if int(j)%2==0:
r.remove(i)
return r
Run Code Online (Sandbox Code Playgroud)
哪个gen_primes(limit)是在限制下返回所有素数的发电机.
如果limit = 200则返回:
[3, 5, 7, 11, 13, 17, 19, 31, 37, 53, 59, 71, 73, 79, 97, 113, 131, 137, 139, 151, 157, 173, 179, 191, 193, 197, 199]
Run Code Online (Sandbox Code Playgroud)
但如果限制为300,我会收到此错误:
line 19, in odd_primes
r.remove(i)
ValueError: list.remove(x): x not in list
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我该如何纠正呢?
如果代码包含多个偶数,则代码可能会多次删除相同的元素.第一个这样的素数是223,这就是为什么你的代码在limit300 时失败的原因,而不是200的时候.
这是违规的代码:
for j in str(i):
if int(j)%2==0:
r.remove(i)
Run Code Online (Sandbox Code Playgroud)
相反,只需删除一次素数.例如:
for j in str(i):
if int(j)%2==0:
r.remove(i)
break
Run Code Online (Sandbox Code Playgroud)
或者更时尚:
if any(int(j)%2 == 0 for j in str(i)):
r.remove(i)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
130 次 |
| 最近记录: |