Python遍历列表删除多个列表元素

在遍历list的时候,删除符合条件的数据,结果不符合预期

num_list = [1, 2, 2, 2, 3]
print(num_list)

for item in num_list:
    if item == 2:
        num_list.remove(item)
    else:
        print(item)

print(num_list)

结果是: 

 

或者有:

num_list = [1, 2, 3, 4, 5]
print(num_list)

for i in range(len(num_list)):
    if num_list[i] == 2:
        num_list.pop(i)
    else:
        print(num_list[i])

print(num_list)

结果报错:

原因是,删除list中的元素后,list的实际长度变小了,但是循环次数没有减少,依然按照原来list的长度进行遍历,所以会造成索引溢出。

1.把列表拷贝,然后对原列表进行删除操作就没问题了

num_list = [1, 2, 2, 2, 3]
print(num_list)

for item in num_list[:]:
    if item == 2:
        num_list.remove(item)
    else:
        print(item)

print(num_list)

 

num_list[:]是对原始的num_list的一个拷贝,是一个新的list,所以,我们遍历新的list,而删除原始的list中的元素,则既不会引起索引溢出,最后又能够得到想要的最终结果。此方法的缺点可能是,对于过大的list,拷贝后可能很占内存。 

2.从后往前遍历列表,删除

3.filter函数

猜你喜欢

转载自blog.csdn.net/word_mhg/article/details/90174570