Python:在列表中移除多个项目
我想把列表b中所有在列表a里的元素都去掉,最后的结果应该是[7,8,9,0],我该怎么做呢?这个方法好像不太管用。
In [21]:
a=[1,2,3,4,5]
b=[1,2,3,5,5,5,7,8,9,0]
for i in b:
if i in a:
print i
b.remove(i)
print b
#
Out[21]:
1
3
5
[2, 5, 5, 7, 8, 9, 0]
2 个回答
0
这段代码会把列表'b'中已经在列表'a'里的项目去掉。
[b.remove(item) for item in a if item in b]
根据@shx2的建议进行了更新:
for item in a:
while item in b:
b.remove(item)
另外,你可以通过把列表'a'转换成集合来加快速度。
for item in set(a):
while item in b:
b.remove(item)
5
使用列表推导和 in
操作符。
b = [ elem for elem in b if elem not in a ]
为了提高速度,你可以先把 a
转换成一个集合,这样查找会更快:
a = set(a)
编辑:正如 @Ignacio 指出的,这并不会直接修改原来的列表,而是创建一个新列表并把它赋值给 b
。如果你必须修改原来的列表,可以用 b[:]
来赋值(意思是用右边的元素替换 b
中的所有元素),而不是直接用 b
,像这样:
b[:] = [ elem for ... ]