【PYTHON】在Python中需要保留重複項時比較兩個列表中的元素

2020-12-24 PYTHON

我想比較兩張單子我想在第一個列表中找到第二個列表中沒有相應條目的元素(順序無關緊要):

a = ['hi', 'hi', 'bye', 'hi']
b = ['hi', 'hi', 'bye']

所以我希望輸出
c = ['hi']  

因為第一個列表中有一個額外的“hi”,它不會出現在第二個列表中。
如果我做了一個the usual techniques,我可以使用列表理解:
[x for x in a if x not in b]

這給了我[],這不是我想要的。
我嘗試過使用set運算子,結果相同,因為該操作將列表的成員減少到唯一性。
這似乎是個簡單的手術我需要先列舉列表中的每個元素,然後建立要比較的元組嗎?我需要把它們放到一個反指令裡嗎當我只想對列表中的元素進行簡單的比較時,所有這些聽起來都有點過頭了!

解決辦法

Counter物件支援多集操作:

>>> from collections import Counter
>>> a = ['hi', 'hi', 'bye', 'hi']
>>> b = ['hi', 'hi', 'bye']
>>> Counter(a) - Counter(b)
Counter({'hi': 1})

從計數器重建列表:
>>> list(counter.elements())
['hi']

出處

Have any Question?

Let us answer it!