gpt4 book ai didi

python - 从列表中迭代删除(Python 2)

转载 作者:太空狗 更新时间:2023-10-30 00:03:33 26 4
gpt4 key购买 nike

我刚刚开始编程,我正在使用 Python 解决 Project Euler 问题以供练习。(这是问题 #2,求 400 万以内的偶数斐波那契数之和。)我的问题出现在底部的循环中,我试图在该循环中找到列表中的奇数并将其删除。

del fiblist[i] 给我以下错误信息:

Traceback (most recent call last): File ".../euler.py", line 35, in del fiblist[i] IndexError: list assignment index out of range

我看不出我在这里做错了什么,如果有人能帮我看看我在这里做错了什么,我将不胜感激。

#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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com