Python,从列表A中删除列表B以生成列表C?

时间:2013-03-03 18:10:01

标签: python

如何从列表中删除列表到新列表?所以从a中减去b来产生一个新的列表,c?

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

b = [3, 4, 5, 6]

c = []?

4 个答案:

答案 0 :(得分:6)

要保持订购并加快使用套装会员资格:

bs = set(b)
c = [x for x in a if x not in bs]

答案 1 :(得分:5)

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

c = list(set(a).difference(set(b))

答案 2 :(得分:5)

或使用列表理解:

c = [x for x in a if x not in b]

答案 3 :(得分: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})