【问题标题】:Beginner Python: Deleting elements from a list [duplicate]初学者 Python:从列表中删除元素 [重复]
【发布时间】:2015-10-23 14:04:08
【问题描述】:

我正在解决 Project Euler 问题 2。我需要找到所有偶数斐波那契数的总和,最高可达 400 万。我有一个函数可以生成所有可能的斐波那契数,直到用户输入的上限。我将这个 fib 列表传递给另一个函数,以消除奇数值。我正在尝试遍历列表并删除奇怪的元素。它返回一个错误说:

in evenFibs
    del list_of_fibs[value]
IndexError: list assignment index out of range

这是我的 evenFibs() 代码:

def evenFibs(upperBound):
    list_of_fibs = getFibs(upperBound)
    for value in list_of_fibs:
        if value % 2 != 0:
            del list_of_fibs[value]
    return list_of_fibs

我不确定为什么会发生此错误。

【问题讨论】:

  • 在迭代列表时从列表中删除项目不是一个好主意 :)
  • 您应该使用 Ben 的链接中接受的答案中的方法。如果您想知道为什么您的方法不起作用,请尝试阅读stackoverflow.com/questions/10812272/… 的答案
  • 问个问题,你为什么不建立一个偶数列表呢?这样您就不必担心一开始就删除它们。
  • @RolfofSaxony 好点,但如果我想到这一点,我就不会学习列表理解了!
  • 你永远不会从成功中学习,只能从失败中学习,希望你失败的越多,你学到的越多;)

标签: python list iteration


【解决方案1】:

请注意,您不应该在迭代数组时更改数组,而且要从数组中删除元素,您应该使用元素的索引,而不是值。您可以使用列表的index 方法获取具有特定值的第一个元素的索引。至于您的任务,最好使用列表理解:

def evenFibs(upperBound):
    list_of_fibs = getFibs(upperBound)
    return [value for value in list_of_fibs if value % 2 == 0]

【讨论】:

  • 从你的陈述和阅读一些链接,我是否正确理解通过从我的数组中删除一个元素,我正在改变其他元素的索引值......因此可以在迭代过程中跳过某些元素?
  • 您可以使用continue 语句跳过元素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-05
  • 2012-05-09
  • 1970-01-01
  • 2012-04-26
  • 2019-05-30
相关资源
最近更新 更多