[英]Intersection of two nested lists in Python
嵌套列表有問題。 我想用python語言計算兩個嵌套列表的交集的長度。 我的清單組成如下:
list1 = [[1,2], [2,3], [3,4]]
list2 = [[1,2], [6,7], [4,5]]
output_list = [[1,2]]
如何計算兩個列表的交集?
我認為有兩種合理的方法可以解決此問題。
如果頂層列表中沒有太多項目,則只需檢查其中一個子列表中的每個子列表是否存在於另一個列表中:
intersection = [inner_list for inner in list1 if inner_list in list2]
in
運算符將測試是否相等,因此可以按預期找到具有相同內容的不同列表對象。 但是,由於列表成員資格測試必須遍歷所有子列表,因此效率不是很高。 換句話說,其性能為O(len(list1)*len(list2))
。 但是,如果您的清單很長,可能要花費比您想要的更多的時間。
漸近有效的替代方法是將內部列表轉換為tuple
s,並將頂級list
s轉換為set
。 實際上,您實際上不需要為此編寫任何循環,因為map
和set
類型的&
運算符將為您處理所有這一切:
intersection_set = set(map(tuple, list1)) & set(map(tuple, list2))
如果您需要的結果是一個list
的list
S,你當然可以,轉換set
的tuple
的背部成list
的list
S:
intersection_list = list(map(list, intersection_set))
在python中使用集合呢?
>>> set1={(1,2),(2,3),(3,4)}
>>> set2={(1,2),(6,7),(4,5)}
>>> set1 & set2
set([(1, 2)])
>>> len(set1 & set2)
1
import json
list1 = [[1,2], [2,3], [3,4]]
list2 = [[1,2], [6,7], [4,5]]
list1_str = map(json.dumps, list1)
list2_str = map(json.dumps, list2)
output_set_str = set(list1_str) & set(list2_str)
output_list = map(json.loads, output_set_str)
print output_list
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.