[英]Common elements of list of lists of lists
我有一個清單清單。 有什么辦法可以使這些交叉。 例如:
a=[[[1, 2], [2, 3]], [[1, 2], [3, 4]], [[1, 2], [1, 4], [2, 4]]]
由此我可以得到[1,2]
的結果,這是那3個列表列表的共同元素?
我可能會這樣做:
>>> sets = [set(tuple(lst) for lst in sublist) for sublist in a]
>>> sets
[set([(1, 2), (2, 3)]), set([(1, 2), (3, 4)]), set([(1, 2), (2, 4), (1, 4)])]
>>> sets[0].intersection(*sets[1:])
set([(1, 2)])
第一步是認識到某些python數據結構可以提供幫助。 如果項目是可哈希的,則set
可以輕松找到交點。 list
不可散列,但tuple
可以,並且在兩者之間進行轉換很容易。 因此,第一步是將列表的子列表變成一組元組。
這是通過第一行完成的:
sets = [set(tuple(lst) for lst in sublist) for sublist in a]
從這里開始,假設您有至少一sets
,則可以選擇第一個,然后將其與其余所有1相交。 將其寫得比上面更詳細:
first_set = sets[0]
rest_of_sets = sets[1:]
intersection = first_set.intersection(*rest_of_sets)
現在您有了一個交集(這是一個包含tuple
的set
)。 如果您願意,我們可以輕松地將其分解為列表:
list_intersection = [list(item) for item in intersection]
1你也可以寫為: intersection = set.intersection(*sets)
-它甚至可能會多一分高效...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.