zxz*_*zxz 6 python iteration fibonacci
我刚刚开始编程,我正在用Python解决Project Euler问题.(这是问题#2,找到了400万以内的偶数斐波纳契数的总和.)我的问题出现在底部的循环中,我试图找到列表中的奇数,并删除它们.
del fiblist[i] 给我以下错误消息:
回溯(最近一次调用最后一次):文件".../euler.py",第35行,在del fiblist [i]中IndexError:列表赋值索引超出范围
我不明白我在这里做错了什么,如果有人能帮助我看看我在这里做错了什么,我真的很感激.
#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
Run Code Online (Sandbox Code Playgroud)
这里的一个问题是i列表中的项目,而不是它的索引.因此,当你这样做时,你del fiblist[i]不是删除i,而是索引处的值i(它不存在,因此你得到一个错误).这可以通过使用enumerate()来获取索引来修复,但这样做会引入一个新问题.
这里的主要问题是,当你迭代它时,你不能修改列表的长度,因为它与Python的迭代相混淆.一种解决方案是复制列表并处理副本,但更好的方法是使用列表解析来执行您想要的操作:
[i for i in fiblist if i%2 == 0]
Run Code Online (Sandbox Code Playgroud)
这会生成一个只包含您想要的元素的新列表.列表推导是一个强大的工具,因此我建议您观看我链接的视频以获取更多信息.
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |