请问如何删除Python中的for循环中的列表元素?

如何删除Python中的for循环中的列表元素?

我有一份名单

a = ["a", "b", "c", "d", "e"]

我希望在如下的for循环中删除此列表中的元素:

for item in a:
    print item
    a.remove(item)

但不管用。我能做什么?


慕田峪9158850
浏览 958回答 3
3回答

杨魅力

不允许在使用for循环。重写代码的最佳方法取决于您要做的是什么。例如,您的代码等效于:for item in a:   print item a[:] = []或者,您可以使用while循环:while a:   print a.pop(0)如果符合条件的话,我试着移除物品。然后我去看下一项。你可以复制每个元素不将条件匹配到第二个列表中:result = []for item in a:   if condition is False:     result.append(item)a = result或者,你可以用filter或列表理解并将结果分配给a:a = filter(lambda item:... , a)或a = [item for item in a if ...]哪里...代表你需要检查的条件。

跃然一笑

迭代列表的副本:>>> a = ["a", "b", "c", "d", "e"]>>> for item in a[:]:     print item    if item == "b":         a.remove(item)a b c d e>>> print a['a', 'c', 'd', 'e']

猛跑小猪

正如其他答案所述,最好的方法是创建一个新的列表-要么迭代一个副本,要么用您想要的元素构造一个列表,然后将它分配回同一个变量。它们之间的区别取决于您的用例,因为它们对原始列表的其他变量的影响不同(或者说,第一个变量影响到它们,第二个变量没有)。如果由于某种原因,副本不是一个选项,那么您还有另一个选项,它依赖于对为什么要修改迭代中断的列表的理解。列表迭代的工作方式是跟踪一个索引,每次在循环中递增它,直到它从列表的末尾掉下来。因此,如果在(或之前)移除当前索引,则从这一点到末尾的所有内容都会向左移动一个点。但是迭代器不知道这一点,实际上跳过了下一个元素,因为它现在位于电流索引而不是下一个索引。但是,移除后当前的指数不影响事物。这意味着,如果您将列表返回到前面,如果您在当前索引中删除一个项,则它的右移-但这并不重要,因为您已经处理了当前位置右侧的所有元素,并且正在向左移动-左边的下一个元素不受更改的影响,因此迭代器给出了您期望的元素。TL;DR:>>> a = list(range(5))>>> for b in reversed(a):     if b == 3:         a.remove(b)>>> a[0, 1, 2, 4]然而,做一个副本通常在使您的代码易于阅读方面更好。为了完整起见,我只提到这种可能性。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python