Python一次性删除list中的一个或多个相同元素
一次性删除list中某个单一元素
Python删除list中某个单一元素有三种常用方法:
list.pop(index)
:删除列表list中 位置索引为index处的值 ,并且返回这个值;
备注:
(1)list.pop(index) 接收的是索引index;
(2)list.pop()在无参的情况下删除的是最后一个元素(典型的栈的特性);
(3)list.pop(index)存在返回值,返回的是删除的元素值。
(4)list 的 append()(添加到尾部),pop()(从尾部弹出),成功地将 list 变成了 stack
list.remove(value)
:删除列表list中 第一个等于value的值,无返回值;
备注:list.remove(value)的参数是具体的元素值,而不是索引;
del(list[index])
或者del list[index]
:删除列表list中 位置索引为index处的值,无返回值;del
中的index
也可以是切片,即:del listname[start : end]
,删除中间一段连续的元素。list.clear()
:删除列表list中所有元素,也即清空列表。
# 示例1
label_list = ['id15', 'id26', 'id15', 'id13', 'id19']
label_list.remove('id15') # 通过remove删除list中第一个等于“id5”的元素——每次仅能删除一个元素
print(label_list)
>>>
['id26', 'id15', 'id13', 'id19']
# 示例2
label_list = ['id15', 'id26', 'id15', 'id13', 'id19']
label_list.pop(0) # 通过pop删除list中index为0处的元素——每次仅能删除一个元素
print(label_list)
>>>
['id26', 'id15', 'id13', 'id19']
# 示例3
label_list = ['id15', 'id26', 'id15', 'id13', 'id19']
del (label_list[0:2]) # 通过del,利用index索引切片删除list中0、1两个元素
print(label_list)
>>>
['id15', 'id13', 'id19']
一次性删除list中多个相同元素
方法一: 通过list.pop(i)
方法 + for循环
实现将index=i
处的元素删除并return该元素。
典型范例:
list_a = ['d', 'd', 7, 4, 'd', 'd', 2, 1]
for i in range(len(alist)-1,-1,-1): # 倒序循环,从最后一个元素循环到第一个元素。不能用正序循环,因为正序循环删除元素后,后续的列表的长度和元素下标同时也跟着变了,由于len(alist)是动态的。
if alist[i] == 'd':
alist.pop(i) # 将index=i处的元素删除并return该元素。如果不想保存这个被删除的值只要不把alist.pop(i)赋值给变量就好,不影响程序运行。
print(alist)
>>>
[7, 4, 2, 1]
# 示例4
url = list("http://c.biancheng.net/python/")
print(url)
>>>
['h', 't', 't', 'p', ':', '/', '/', 'c', '.', 'b', 'i', 'a', 'n', 'c', 'h', 'e', 'n', 'g', '.', 'n', 'e', 't', '/', 'p', 'y', 't', 'h', 'o', 'n', '/']
url.clear() # 使用clear删除列表list中所有元素
print(url)
>>>
[]
方法二: 通过list.remove(‘xx’)
方法 + for循环
实现将list中元素值“xx”
删除,删除过程不会返回被删除的值。
由于remove在for循环中动态改变了list长度和每一个元素的位置,因此不能用正序循环,否则报错index溢出;正确的做法是使用 倒序循环——依次删除首次出现的指定元素。
alist = ['d', 'd', 7, 4, 'd', 'd', 2, 1]
for i in range(len(alist)-1,-1,-1): # 同样不能用正序循环,for i in range(0,len(alist)), 用了remove()之后,len(alist)是动态的,会产生列表下标越界错误
if alist[i] == 'd':
alist.remove('d') # 从左往右删除首次出现的值为‘d'的元素
print(alist)
>>>
[7, 4, 2, 1]
利用列表表达式快速实现一次性删除多个指定元素
alist = ['d', 'd', 7, 4, 'd', 'd', 2, 1]
list(set(alist).difference(set([alist[i] for i in range(len(alist)-1,-1,-1) if alist[i] == 'd'])))
>>>
[7, 4, 2, 1]