如何将一个列表中的另一个列表剔除出来,生成一个新的列表呢?比如从列表a中减去列表b,得到新的列表c。
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9,]
b = [3, 4, 5, 6]
c = []?
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9,]
b = [3, 4, 5, 6]
c = []?
c = list(set(a).difference(set(b))
a
中的顺序或任何重复元素。 - Koslist(set(a) - set(b))
? - thebjornbs = set(b)
c = [x for x in a if x not in bs]
set(b)
每次测试 if
时都会重新构建。 - DSMset(b)
存储在一个变量中。 - Ashwini Chaudhary或者使用列表推导式:
c = [x for x in a if x not in b]
根据你的需求,使用集合可能更为合适:
>>> 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})
[0,1,1] - [1]
时,你希望得到的结果是[0]
还是[0,1]
? 当你说[0,1,2] - [0,2]
时,你希望得到的结果是[1]
还是[0,1,2]
(因为[0,2]
不是一个连续子序列)?等等。 - DSM