list of lists的常用元素
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)
-- 甚至可以是tiny 效率高一点...
我有一个列表列表列表。有什么办法可以得到这些的交集。例如:
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)
-- 甚至可以是tiny 效率高一点...