簡體   English   中英

刪除具有重復元素的兩個列表之間的公共元素

[英]Remove common elements between two list with repeated elements

我需要你的幫助,因為我對這個問題有點困惑。

我有兩個包含重復元素的列表:

L = [1,2,5,2,4,1,9]
S =[4,2,9,1]

我想得到兩個列表之間的“差異”,就像我做LS = LS ,結果應該是LS = [1,2,5] 我知道l2將始終是L的子集,因此S永遠不會有L不存在的值。

請注意,僅從L刪除了一個1和一個2 ,因為S只有一個1和一個2 L可以有元素重復n次,而不僅僅是 2 次。

你知道是否有一種“簡單”的方法來做到這一點? 我不想得到一個O(n^2)程序。

非常感謝!

使用collections.Counter (Python 的multi-set版本)

from collections import Counter

L = [1, 2, 5, 2, 4, 1, 9]
S = [4, 2, 9, 1]

LS = list((Counter(L) - Counter(S)).elements())
print(LS)

輸出

[1, 2, 5]

這種方法的整體復雜度是O(n)

你可以使用這個:

l = [1, 2, 5, 2, 4, 1, 9]
s = [4, 2, 9, 1]
for i in range(len(l)-1,-1,-1):
    if l[i] in s:
        s.remove(l[i])
        l.pop(i)
print(l)

但我不知道它的復雜性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM