【问题标题】:Why does python remove behave like that?为什么 python remove 会这样?
【发布时间】:2011-03-19 21:34:13
【问题描述】:

我知道有更好的方法可以做到这一点,这实际上不是我想做的,但我想知道为什么它不起作用?

x = [13, 3, 9, 41]
for i in x:
    x.remove(i)
print(x)
[3, 41]

列表不应该是空的吗?

【问题讨论】:

标签: list python-3.x


【解决方案1】:

你不应该在循环中修改列表,试试这个:

x = [13, 3, 9, 41]
for i in x[:]:
    x.remove(i)
print(x)

这将遍历x 的副本,但会从x 中删除元素。

这是Python strange behavior in for loop or lists的复制品,你可以在那里找到更详尽的解释。

【讨论】:

  • 谢谢。使用原始列表时remove 的行为是否未定义?因为它在某些情况下有效,而在其他情况下无效。如果它根本不起作用(或者至少它会产生警告、异常等),那就太好了。
【解决方案2】:

【讨论】:

  • 另外,如果你想删除基于谓词的列表元素,你宁愿使用列表推导:mylist = [e for e in mylist if predicate(e)]
猜你喜欢
  • 2014-12-21
  • 1970-01-01
  • 2018-10-15
  • 2012-09-25
  • 2020-10-26
  • 1970-01-01
  • 1970-01-01
  • 2011-06-03
相关资源
最近更新 更多