【问题标题】:How do I remove an element that does not satisfy a condition from a list? [duplicate]如何从列表中删除不满足条件的元素? [复制]
【发布时间】:2019-09-03 10:33:10
【问题描述】:

我想从列表中删除 2 的倍数。我该怎么做?

a = list(range(1, 11))
print(a)
for ele in a:
    if ele % 2 == 0:
        a.pop(ele)
print(a)

条件前a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

条件之后,我期待a = [1, 3, 5, 7, 9] 但我收到此错误IndexError: pop index out of range

如何获取 2 的各种倍数的索引以将它们弹出? 我是初学者。

【问题讨论】:

  • 不要修改你迭代的列表!
  • pop 的参数没有达到您的预期。见:docs.python.org/3/tutorial/datastructures.html
  • 而不是删除创建包含您想要保留的元素的新列表。
  • 正如@furas 所说,不要只是列出列表并删除元素以使其成为您想要的。从头开始制作您想要的列表(例如:a = [x for x in range(1, 11) if x % 2 != 0]

标签: python python-3.x loops


【解决方案1】:

如果您在要迭代的列表上使用pop,您正在修改该列表,您会遇到这样的问题,更好的方法可能是创建一个新列表并将您的奇数元素放入该列表中。
此外,您在使用列表的值时使用pop,而不是在不正确的索引上使用它。 (https://docs.python.org/3/tutorial/datastructures.html#more-on-lists)

a = list(range(1, 11))
odd_list = []
for ele in a:
    if ele % 2 != 0:
        odd_list.append(ele)
print(odd_list)
#[1, 3, 5, 7, 9]

【讨论】:

  • 请不要在明显偏离主题/不好的问题上发布答案! See: Should one advise on off topic questions?
  • 为我的无知道歉,但我不确定它是否离题。这个问题在根本上是错误的,我只是想举一个问题的例子,并试图提供一个正确的解决方案。
  • 此外,人们在上面的评论部分也在做同样的事情。我只是以答案的形式提供了一种方法
  • 与修改您迭代的列表的骗子一样。除此之外,它只有 50% 的错误 - 他在一个值上使用 pop,而不是在要删除的值的索引上。 Wich 也被骗了……
  • 您阅读链接了吗?你应该做什么:投反对票,投票关闭(如果你的代表低于 3K,则标记关闭),评论并解释为什么他们的问题不好如何解决它,使用导览、帮助,甚至是聊天会话 不要回答离题的问题,不要通过聊天、cmets 或任何其他方式回答大大地。甚至可以说:去这里,谷歌,因为下一次,他们会做同样的事情并最终得到他们想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多