簡體   English   中英

列表列表的通用元素

[英]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)

現在您有了一個交集(這是一個包含tupleset )。 如果您願意,我們可以輕松地將其分解為列表:

list_intersection = [list(item) for item in intersection]

1你也可以寫為: intersection = set.intersection(*sets) -它甚至可能會多一分高效...

暫無
暫無

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

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