Python遍历列表时删除元素的几种方法

问题来源
删除列表中的指定元素

描述:
输入一个整数列表,并输入一个整数x,删除列表中所有值为x的数,再输出列表。

问题代码

a = list(eval(input()))
x = eval(input())
for i in a:
	if i==x:
		a.remove(i)
print(a)

输入:3,4,1,1,1,7,9,1 1
输出:[3, 4, 7, 9,1]

可以发现,列表中的1并未完全去除。

原因用for发起任何形式的遍历时,它的遍历顺序是一开始就确定的,而在遍历中删除了元素导致了当前索引的变化。整个列表的元素向前移动,但i却在最初就确定了,所以导致漏删元素。

解决方法
1.最简单的方法

a = list(eval(input()))
x = eval(input())
for i in a[:]:
	if i==x:
		a.remove(i)
print(a)

2.使用filter()函数过滤掉符合指定条件的元素。

a = list(eval(input()))
x = eval(input())
print(list(filter(lambda y: y != x, a)))

3.使用列表解析式。

a = list(eval(input()))
x = eval(input())
b = [i for i in a if i != x]
print(b)

4.利用深拷贝

import copy
a = list(eval(input()))
x = eval(input())
b = copy.deepcopy(a)
for i in a:
    if i == x:
        b.remove(i)
print(b)

Tip:不可以直接b=a,因为这样因为新变量和原变量的物理地址仍旧是相同的。

5.使用while循环

a = list(eval(input()))
x = eval(input())
while x in a:
    a.remove(x)
print(a)

6.倒序删除

a = list(eval(input()))
x = eval(input())
for i in range(len(a)-1,-1,-1):
    if a[i] == x:
        a.remove(x)
print(a)

因为列表总是“向前移”,所以可以倒序遍历,即使后面的元素被修改了,还没有被遍历的元素和其坐标仍保持不变,不过会可能导致遍历长度大于列表的长度。

参考:
链接: Python–遍历列表时删除元素的正确做法.
链接: Python遍历列表时删除元素

你可能感兴趣的:(Python学习)