我想匹配兩個列表,但我也想要重複匹配。我不能使用set,因爲這隻會在下面的第二個示例中給出{3}。Python - 在兩個列表中獲得重複匹配
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}。Python - 在兩個列表中獲得重複匹配
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]
您可以使用列表comprehesion檢查和a
回到每一個項目,如果它在b
存在象下面這樣:如果你想只在兩種a
和b
元素
[item for item in a if item in 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]
試着這麼做(如果順序並不重要),Python的2:
from 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]
我假設你錯過4.你有你的產量貼什麼其他例如:在當x
[3,3]
是的,我確實想念4(編輯),我想這是做我想做的,謝謝! – jackonator
'C = X的X在b]' –
@讓 - 弗朗索瓦法布爾我不認爲這就是他的意思。 'a = [3,3]; b = [3]'只有在我認爲的時候才匹配。這是一個列表交集。 – kabanus
我有疑問,或者我會回答 –