Python弹出循环

2024-03-29 04:41:53 发布

您现在位置:Python中文网/ 问答频道 /正文

遇到了一些看起来很奇怪的事情。我使用一组列表来保存一些数据,如果其中满足条件,我想从每个列表中删除这些数据。在

这就是我目前所拥有的。它可以工作,并从第一个结果中删除所有内容,但当有多个满足条件时,它就会离开它们。在

agecounter = 0
for matches in List1:
  if Condition Met:
    List1.pop(agecounter)
    List2.pop(agecounter)
    List3.pop(agecounter)
  agecounter = agecounter + 1

如果我在这些列表中有10个条目,并且有3个满足条件,它将删除第一个条目。我甚至可以打印符合条件的其他结果的数据。它很好地将它打印到控制台,没有抛出异常,但似乎只是忽略了pop。在

我可能遗漏了一些很明显的东西,但没有理由不起作用,是吗?在


Tags: 数据in内容列表forif条目condition
3条回答

迭代列表时从列表中删除元素不是一个好主意。您可能应该迭代列表的副本

一个完整的例子来说明这个问题将有助于得到更好的答案。在

话虽如此,波普可能并不像你所期望的那样工作。它不会从列表中删除agecounter。它正在移除agecounter位置的项目。在

>>> a = [1,2,3, 4]
>>> a.pop(1)
2
>>> a
[1, 3, 4]
>>> a.pop(2)
4

当你越走越高,你越有可能越走越远,抛出一个例外。在

^{pr2}$

添加到@StephenTG的答案中,您可能希望复制数据,而不是在迭代期间修改它。您可以使用列表理解来“过滤”它:

a = [1,2,3,4]
>>> b = [2,3]
>>> [x for x in a if x not in b]
[1, 4]

按相反的顺序遍历列表

agecounter = len(List1)-1
for matches in reversed(List1):
    if Condition Met:
        List1.pop(agecounter)
        List2.pop(agecounter)
        List3.pop(agecounter)
    agecounter = agecounter - 1

相关问题 更多 >