4

如何将列表中的列表从列表中删除到新列表中?那么从 a 中减去 b 以产生一个新列表 c?

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9,]

b = [3, 4, 5, 6]

c = []?
4

4 回答 4

11

将列表转换为集合并获取集合差异。

c = list(set(a).difference(set(b))
于 2013-03-03T18:11:54.617 回答
7

要保持排序并通过使用集合成员资格获得加速:

bs = set(b)
c = [x for x in a if x not in bs]
于 2013-03-03T18:16:44.937 回答
5

或使用列表推导:

c = [x for x in a if x not in b]
于 2013-03-03T18:12:40.380 回答
2

根据你正在做的事情,首先你可能会更好地使用集合:

>>> a = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, }
>>> b = {3, 4, 5, 6}
>>> a
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b
set([3, 4, 5, 6])
>>> a.difference(b)
set([0, 1, 2, 7, 8, 9])

collections.Counter如果您想计算多次重复,这是另一种有用的标准类型:

>>> from collections import Counter as C
>>> a = C([1,1,1,2,2,3,4])
>>> b = C([1,4,5])
>>> a - b
Counter({1: 2, 2: 2, 3: 1})
于 2013-03-03T18:16:04.310 回答