我有两个列表,其中包含许多相同的项目,包括重复的项目。我想检查第一个列表中的哪些项目不在第二个列表中。例如,我可能有一个这样的列表:
l1 = ['a', 'b', 'c', 'b', 'c']其中一个列表如下所示:
l2 = ['a', 'b', 'c', 'b']比较这两个列表,我想返回第三个列表,如下所示:
l3 = ['c']我现在使用的是我不久前写的一些糟糕的代码,我非常确定这些代码甚至不能正常工作,如下所示。
def list_difference(l1,l2):
for i in range(0, len(l1)):
for j in range(0, len(l2)):
if l1[i] == l1[j]:
l1[i] = 'damn'
l2[j] = 'damn'
l3 = []
for item in l1:
if item!='damn':
l3.append(item)
return l3我怎样才能更好地完成这项任务?
发布于 2013-02-06 23:47:41
要同时考虑重复项和元素顺序,请执行以下操作:
from collections import Counter
def list_difference(a, b):
count = Counter(a) # count items in a
count.subtract(b) # subtract items that are in b
diff = []
for x in a:
if count[x] > 0:
count[x] -= 1
diff.append(x)
return diffExample
print(list_difference("z y z x v x y x u".split(), "x y z w z".split()))
# -> ['y', 'x', 'v', 'x', 'u']Python 2.5版本:
from collections import defaultdict
def list_difference25(a, b):
# count items in a
count = defaultdict(int) # item -> number of occurrences
for x in a:
count[x] += 1
# subtract items that are in b
for x in b:
count[x] -= 1
diff = []
for x in a:
if count[x] > 0:
count[x] -= 1
diff.append(x)
return diffhttps://stackoverflow.com/questions/8106227
复制相似问题