我想獲得兩個串列之間的重復項。像這樣的東西:
list1 = [1,2,3,4,5]
list2 = [1,2,8,4,6]
duplicates = getDuplicates(list1, list2)
print(duplicates) # => = [1,2,4]
我試圖搜索,但我只找到了如何洗掉重復項。
uj5u.com熱心網友回復:
你可以使用一個set和.intersection()方法。像這樣:
list1 = [1,2,3,4,5]
list2 = [1,2,8,4,6]
duplicates = list(set(list1).intersection(list2))
print(duplicates) # => [1, 2, 4]
我使用jsbueno 的答案timeit對此進行了測驗,發現我的答案明顯更快。對于兩個包含 5 個元素的串列,我的答案為 1,000,000 次運行耗時 0.64 秒,而 jsbueno 耗時 0.74 秒。當擴大到兩個包含 100 個元素的串列時,我的答案只用了 4.54 秒,而他的答案用了 8.08 秒。我從中得出的結論是,內置的set.intersection縮放比串列理解要好得多。
uj5u.com熱心網友回復:
通過在挑選成員之前將其中一個串列轉換為一組,此操作將以線性時間運行,而不是二次時間。
如果兩個串列都開始包含數十萬個專案,那將產生巨大的影響:
set1 = set(list1)
duplicates = [item for item in list2 if item in set1]
否則,對于少數幾個專案,一個簡單的過濾器就足夠了:duplicates = [item for item in list2 if item in list1].
uj5u.com熱心網友回復:
你可以使用回圈,但我認為它在更大的陣列中很慢。在這種情況下,它應該是
duplicates = [i for i in list1 if i in list2]
或者你可以使用集合
set(list1) & set(list2)
或者你可以使用更快的交叉口。
duplicates = set(list1).intersection(set(list2))
uj5u.com熱心網友回復:
您可以這樣做以獲取重復項。
list1 = [1, 2, 3, 4, 5]
list2 = [1, 2, 8, 4, 6]
print (set(list1) & set(list2))
這僅適用于大小相等的串列,確實意味著重要性順序,或者您可以執行下面的其他方式,它適用于大小不等的串列。
list1 = [1, 2, 3, 4, 5]
list2 = [1, 2, 8, 4, 6]
print (set(list1).intersection(list2))
希望能幫助到你。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/530217.html
標籤:Python列表重复
上一篇:如何在Python或Scala中對兩個串列進行分組和聚合?
下一篇:如何在字典中搜索/附加串列
