我有一个列表的集合,其中一些有重叠的元素:
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中,什么是一种简单且相当快速的方法?你知道吗
Edit:这似乎不是Yet another merging list of lists, but most pythonic way的副本,因为这似乎不考虑只在第三个集合中重叠的组。我从那个问题中尝试的解决方案并没有给出我在这里寻找的答案。你知道吗
下面是一种方法(假设您希望在重叠的结果上有唯一的元素):
输出:
可以使用连续合并方法对集合执行此操作:
在评论中,我使用networkx处理来自alkasm的建议:
输出:
毫无疑问,这可以优化,但它似乎解决了我的问题,现在。你知道吗
相关问题 更多 >
编程相关推荐