以num_list = [1, 2, 2, 3, 4, 5]
为例。
删除一个可以确定的元素,一共有三种方法。
-
num_list.remove(2)
,会删除第一个值为2的元素。 -
num_list.pop(1)
,会弹出索引为1的元素,若不传参数,则弹出最后一个元素。 -
del num_list[1]
,会删除索引为1的元素。 - 还可以使用切片来达到目的,属于重新构造一个新的列表。
删除一个符合条件的元素。
for i, item in enumerate(num_list):
if item == 2:
num_list.pop(i)
else:
print(item)
结果是:
1
3
4
5
再查看下num_list,发现是[1,2,3,4,5]
,值为2的元素只删除了第一个。
原因是当删除第一个值为2的元素时,列表往前移动一位,导致第二个2直接被跳过了。
解决办法是反向,这样可以避免出现此问题。
for i in range(len(num_list) - 1, -1, -1):
if num_list[i] == 2:
num_list.pop(i)
else:
print(num_list[i])
结果是:
5
4
3
1
另外,还有方法可达成目的,但是会增加内存使用。
[item for item in num_list if item != 2]
或
def f():
for item in num_list:
if item != 2:
yield item
list(f())