捻?在python中迭代时从列表中删除项目

时间:2014-08-19 02:37:42

标签: python iteration

我知道关于这个话题有很多类似的问题,我已经进行了足够的研究,让我觉得这个问题的转折还没有被讨论过,或者很难找到。我知道除非您使用某种副本或其他内容,否则您无法从正在迭代的列表中删除项目。我遇到的例子和

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)。有没有办法做到这一点?

3 个答案:

答案 0 :(得分:1)

您可以在if语句中添加另一项检查: 如果x == 7且列表中有x:     list.remove(9)

答案 1 :(得分:0)

请记住,您要从原始列表中删除并迭代副本。该副本仍然包含7,因此9也将被删除。

答案 2 :(得分:0)

试试这个。

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]

不是迭代一个新列表,而是可以处理同一个列表。