如何将python列表与共享项组合到新列表中
我是python新手,遇到了一个障碍。我有一个python列表,每行包含一个列表。基本上,我希望合并在列表之间共享值的列表。例如 下面是我的python列表目前的外观,以及我希望在执行附加命令后数据的外观 我知道这类问题对于集合和交集来说是理想的,但我就是没能让它们正常工作。我也看到过一篇使用索引的帖子,这对我来说也不起作用 列表内容如下:如何将python列表与共享项组合到新列表中,python,list,python-2.7,set,intersection,Python,List,Python 2.7,Set,Intersection,我是python新手,遇到了一个障碍。我有一个python列表,每行包含一个列表。基本上,我希望合并在列表之间共享值的列表。例如 下面是我的python列表目前的外观,以及我希望在执行附加命令后数据的外观 我知道这类问题对于集合和交集来说是理想的,但我就是没能让它们正常工作。我也看到过一篇使用索引的帖子,这对我来说也不起作用 列表内容如下: [ ['mary', 'home'], ['mary', 'school'], ['mary', 'work'], ['bo
[
['mary', 'home'],
['mary', 'school'],
['mary', 'work'],
['bob', 'home'],
['bob', 'school'],
['bob', 'work'],
['tom', 'work'],
['tom', 'school'],
['tom', 'home'],
['bill', 'vacation'],
]
我希望它看起来像什么:
[
['mary', 'bob', 'tom', 'home', 'school', 'work'],
['bill', 'vacation'],
]
您的示例数据表明,输入数据中的顺序很重要,这会使情况变得复杂。假设它实际上只是一个示例,顺序并不重要,那么集合确实是解决问题的理想方法:
data = [
['mary', 'home'],
['mary', 'school'],
['mary', 'work'],
['bob', 'home'],
['bob', 'school'],
['bob', 'work'],
['tom', 'work'],
['tom', 'school'],
['tom', 'home'],
['bill', 'vacation'],
]
combined = []
for subset in [set(d) for d in data]:
for candidate in combined:
if not candidate.isdisjoint(subset):
candidate.update(subset)
break
else:
combined.append(subset)
这使用了Python的构造,这不是每个人都熟悉的<代码>组合将包含一个集合列表,因此您可能希望根据您的用例将它们转换为列表。谢谢Zero,它工作得很好!你是对的,秩序并不重要。