我刚刚开始编程,正在使用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/

10-11 23:01
查看更多