【问题标题】:Script which deletes odd numbers from a list (Python) [duplicate]从列表中删除奇数的脚本(Python)[重复]
【发布时间】:2017-02-02 04:11:23
【问题描述】:

我编写了一个函数,旨在从列表中删除所有奇数。

def purify(l):
    for e in range(len(l)):
        if l[e] % 2 != 0:
            del l[e]
    return l

v = [4, 5, 5, 6]
print purify(v)

但是当它开始执行 list v 时,它从第二个周期开始不起作用并给出错误:“IndexError: list index out of range”。为什么?代码有什么问题?

【问题讨论】:

  • 另见Removing items from a list while iterating over the list的解释和其他链接问题。
  • 删除/删除您正在迭代的列表的元素很棘手。这可能的,但这有点像锯掉你正坐在的树枝。如果你做的不对,就会发生坏事™。 :) 但无论如何,建立一个包含您想要保留的元素的新列表会更快。删除列表元素可能很耗时:当您删除一个元素时,所有后续元素都必须向下移动,因此最好不要删除列表元素,除非它靠近列表末尾。
  • 谢谢!我明白了

标签: python list


【解决方案1】:

你可以使用列表推导:

lst = [4, 5, 5, 6]

lst_even = [i for i in lst if not i%2]

print v_purified

【讨论】:

    【解决方案2】:

    做你想做的最简单的方法可能是通过列表理解:

    def purify(l):
        return [e for e in l if not (e % 2)]
    

    【讨论】:

      猜你喜欢
      • 2022-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-11
      • 2017-02-06
      • 1970-01-01
      • 1970-01-01
      • 2020-01-02
      相关资源
      最近更新 更多