扭曲?在python中迭代时从列表中删除项

2024-04-25 15:06:26 发布

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

我知道关于这个话题有很多类似的问题,我已经做了足够的研究,让我觉得这个问题的转折点还没有被讨论过,或者只是很难找到。我知道你不能仅仅从你正在迭代的列表中删除条目,除非你使用了某种拷贝或者什么。我遇到的例子

list=[1,2,3,4,5,6,7,8,9,10]

for x in list[:]:
    if x==3:
        list.remove(x)
        list.remove(7)

这将从列表中删除3和7。但是,如果我有以下内容:

for x in list[:]:
    if x==3:
        list.remove(x)
        list.remove(7)
    if x==7:
        list.remove(9)

此迭代将删除3、7和9。因为7“应该”已经从以前的迭代中删除了,所以我实际上不希望9被删除(因为列表中不应该再有7了)。有什么办法吗?你知道吗


Tags: in列表forif条目removelist例子
3条回答

请记住,您正在从原始列表中删除并迭代一个副本。副本中仍然包含7,因此9也将被删除。你知道吗

您可以向if语句添加另一个检查: 如果x==7且列表中有x: 列表.删除(九)

试试这个。你知道吗

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for x in list1:
    if x == 3:
        list1.remove(x)
        list1.remove(7)
    if x == 7:
        list1.remove(9)
print list1

Output: [1, 2, 4, 5, 6, 8, 9, 10]

您可以在同一个列表上工作,而不是迭代新列表。你知道吗

相关问题 更多 >

    热门问题