我刚刚开始编程,正在使用Python解决Euler项目的问题。
(这是问题2,找到400万以内的偶数斐波纳契数之和。)
我的问题出现在底部的循环中,我试图在该循环中找到列表中的奇数并删除它们。del fiblist[i]
给我以下错误消息:
我在这里看不到我在做什么错,如果有人可以帮助我在这里查看我在做什么错,我将不胜感激。
#euler2
def fibonacciList(limit):
'''generates a list of fib numbers up to N'''
mylist = []
a,b = 1,2
while True:
if a <= limit:
mylist.append(a)
a,b = b,a+b
else:
break
return mylist
fiblist = fibonacciList(4000000)
for i in fiblist:
if i%2 != 0: #if not even, delete from list
print i
del fiblist[i]
print fiblist
最佳答案
这里的一个问题是i
是列表中的项目,而不是索引。因此,当您执行del fiblist[i]
时,您并没有删除i
,而是删除了索引i
上的值(该值不存在,因此会出现错误)。可以通过使用enumerate()
来获取要使用的索引来解决此问题,但是这样做会带来一个新问题。
这里的主要问题是,在迭代列表时,您不能修改列表的长度,因为它与Python的迭代困惑。一种解决方案是复制列表并处理副本,但是更好的解决方案是使用list comprehension来执行所需的操作:
[i for i in fiblist if i%2 == 0]
这样会生成一个仅包含您想要的元素的新列表。列表推导是一个功能强大的工具,因此,建议您观看我链接的视频以获取更多信息。
关于python - 从列表中迭代删除(Python 2),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13850527/