Python:在列表中移除多个项目

0 投票
2 回答
6275 浏览
提问于 2025-04-20 08:17

我想把列表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 ... ]

撰写回答