我有一份清单清单。有什么方法可以得到这些的交集。例如:
a=[[[1, 2], [2, 3]], [[1, 2], [3, 4]], [[1, 2], [1, 4], [2, 4]]]
从这里我怎样才能得到[1,2]
作为结果,这是这3个列表列表的共同元素?
答案 0 :(得分:2)
我可能会这样做:
>>> 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)
现在你有了一个交叉点(它是一个包含set
的{{1}}。如果您愿意,我们可以轻松地将其重新列入列表:
tuple
1 你也可以把它写成:list_intersection = [list(item) for item in intersection]
- 甚至可能是 tiny 位效率更高......
功能