我有一个列表集合,其中一些有重叠的元素:
coll = [['aaaa', 'aaab', 'abaa'],
['bbbb', 'bbbb'],
['aaaa', 'bbbb'],
['dddd', 'dddd'],
['bbbb', 'bbbb', 'cccc','aaaa'],
['eeee','eeef','gggg','gggi'],
['gggg','hhhh','iiii']]
我只想将重叠的列表集中在一起,这将产生
pooled = [['aaaa', 'aaab', 'abaa','bbbb','cccc'],
['eeee','eeef','gggg','gggi','hhhh','iiii'],
['dddd', 'dddd']]
(如果不清楚,第一个列表和第二个列表都与第三个列表重叠,因此应该全部合并在一起,即使它们本身并不包含共同的元素。)
“重叠”表示两个列表至少有一个元素相同。“合并”意味着将两个列表合并为一个平面列表或一个平面集合。
可能存在多个集合,例如x、y和z彼此重叠,v和w彼此重叠,但x+y+z不与v+w重叠。并且可能存在不与任何内容重叠的列表。
(一个类比就是家庭。一起加入所有的蒙太古,一起加入所有的卡布利特,但没有蒙塔古与卡布利特结婚,所以这两个集群将保持不同。)
我不关心重复的项目是否会被多次包含。
在Python中执行此操作的简单且相当快速的方法是什么?
编辑:这似乎不是Yet another merging list of lists, but most pythonic way的副本,因为它似乎不考虑仅通过第三个集合重叠的组。我从这个问题中尝试的解决方案并没有给出我在这里寻找的答案。
https://stackoverflow.com/questions/56567089
复制相似问题