【问题标题】:Removing lists within a nested list based on condition [duplicate]根据条件删除嵌套列表中的列表[重复]
【发布时间】:2018-09-15 06:15:18
【问题描述】:

我有一个包含以下内容的嵌套列表:

[['X', 0],
['X', 0],
['X', ''],
['X', '']]

for i in myList:
    if i[1] == 0:
         myList.remove(i)

这只会删除第一个列表。输出将是:

[['X', 0],
['X', ''],
['X', '']]

我怎样才能同时获得它?

【问题讨论】:

  • 在迭代列表时不要更改列表...
  • 当你 remove(i) 时,你改变了你正在迭代的列表。因此,当您删除元素 0 时,您的循环将继续使用元素 1,但之前 曾是的元素 1 现在是元素 0,因为之前的元素 0 已被删除,所以您跳过了一个值。跨度>
  • 同上,但如果你想使用你正在使用的网络,你需要反向迭代列表:for i in reversed(range(len(myList))):
  • 或使用for i in myList[:] 复制原始列表。

标签: python python-3.x python-2.7


【解决方案1】:

使用 list comprehension 。迭代时不要从列表中删除元素。

例如:

s = [['X', 0],
['X', 0],
['X', ''],
['X', '']]

print([i for i in s if i[1] != 0])

【讨论】:

  • 我写的是同样的答案,但你更快。这是一种比迭代和更改原始列表更好的方法。
  • '在迭代时不要从列表中删除元素。'是的,我知道这是不好的做法,也是它不起作用的根源。感谢您的意见和帮助:)
猜你喜欢
  • 2020-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-23
  • 1970-01-01
  • 2022-12-12
  • 2021-08-20
相关资源
最近更新 更多