我正在尝试匹配两个列表,但我希望也能捕获重复的匹配项。我不能使用set,因为在下面的第二个例子中它只会给我{3}。
a = [1,2,3,4]
b = [3,3,4,5]
return [3,4]
a = [1,2,3,3]
b = [3,3,4,5]
return [3,3]
我正在尝试匹配两个列表,但我希望也能捕获重复的匹配项。我不能使用set,因为在下面的第二个例子中它只会给我{3}。
a = [1,2,3,4]
b = [3,3,4,5]
return [3,4]
a = [1,2,3,3]
b = [3,3,4,5]
return [3,3]
a
中存在于b
中的每个项,代码如下:[item for item in a if item in b]
a
中又在b
中的元素(覆盖@kabanus在评论中提到的情况),你可以使用以下代码:[item for item in set(a) for i in range(min(a.count(item), b.count(item)))]
输出:
>>> a = [1, 2, 3, 4]
>>> b = [3, 3, 4, 5]
>>> [item for item in set(a) for i in range(min(a.count(item), b.count(item)))]
[3, 4]
>>>
>>> a = [1, 2, 3, 3]
>>> b = [3, 3, 4, 5]
>>> [item for item in set(a) for i in range(min(a.count(item), b.count(item)))]
[3, 3]
>>>
>>> a = [3, 3, 4]
>>> b = [4, 4, 3]
>>> [item for item in set(a) for i in range(min(a.count(item), b.count(item)))]
[3, 4]
a=[3,3];b=[3]
只应该匹配一次,就像交集一样,否则会出现两次匹配。 - kabanusa=[3,3,4];b=[4,4,3]
时,您的函数会失败(因为数字 4 出现了两次),但是几乎就可以了。如果您能让它正常工作,我会给您点赞。这个条件实在太简单了。 - kabanusfrom collections import Counter
a = [1,2,3,4]
b = [3,3,4,5]
ca=Counter(a)
cb=Counter(b)
print sum([[x]*min(ca[x],cb[x]) for x in set(a)],[])
[3,4]
[3,3]
c=[x for x in a if x in b]
- Jean-François Fabrea=[3,3];b=[3]
只会匹配一次。这是一个列表交集。 - kabanus