为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕田峪9158850 2019-11-05 09:04:55
如何删除Python中的for循环中的列表元素?我有一份名单a = ["a", "b", "c", "d", "e"]我希望在如下的for循环中删除此列表中的元素:for item in a:     print item     a.remove(item)但不管用。我能做什么?
查看完整描述

3 回答

?
杨魅力

TA贡献1811条经验 获得超5个赞

不允许在使用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 ...]

哪里...代表你需要检查的条件。



查看完整回答
反对 回复 2019-11-06
?
跃然一笑

TA贡献1826条经验 获得超6个赞

迭代列表的副本:

>>> 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']



查看完整回答
反对 回复 2019-11-06
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

正如其他答案所述,最好的方法是创建一个新的列表-要么迭代一个副本,要么用您想要的元素构造一个列表,然后将它分配回同一个变量。它们之间的区别取决于您的用例,因为它们对原始列表的其他变量的影响不同(或者说,第一个变量影响到它们,第二个变量没有)。

如果由于某种原因,副本不是一个选项,那么您还有另一个选项,它依赖于对为什么要修改迭代中断的列表的理解。列表迭代的工作方式是跟踪一个索引,每次在循环中递增它,直到它从列表的末尾掉下来。因此,如果在(或之前)移除当前索引,则从这一点到末尾的所有内容都会向左移动一个点。但是迭代器不知道这一点,实际上跳过了下一个元素,因为它现在位于电流索引而不是下一个索引。但是,移除当前的指数不影响事物。

这意味着,如果您将列表返回到前面,如果您在当前索引中删除一个项,则它的右移-但这并不重要,因为您已经处理了当前位置右侧的所有元素,并且正在向左移动-左边的下一个元素不受更改的影响,因此迭代器给出了您期望的元素。

TL;DR:

>>> a = list(range(5))>>> for b in reversed(a):
    if b == 3:
        a.remove(b)>>> a[0, 1, 2, 4]

然而,做一个副本通常在使您的代码易于阅读方面更好。为了完整起见,我只提到这种可能性。



查看完整回答
反对 回复 2019-11-06
  • 3 回答
  • 0 关注
  • 908 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信