列表列表的常用元素

时间:2016-06-06 16:55:31

标签: python list intersection

我有一份清单清单。有什么方法可以得到这些的交集。例如:

a=[[[1, 2], [2, 3]], [[1, 2], [3, 4]], [[1, 2], [1, 4], [2, 4]]]

从这里我怎样才能得到[1,2]作为结果,这是这3个列表列表的共同元素?

1 个答案:

答案 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 位效率更高...... 功能