python中多个集合的并集

新手上路,请多包涵
[[1, '34', '44'], [1, '40', '30', '41'], [1, '41', '40', '42'], [1, '42', '41', '43'], [1, '43', '42', '44'], [1, '44', '34', '43']]

我有一个列表列表。我的目的是检查任何一个子列表是否与其他子列表有任何共同点(不包括要比较的第一个索引对象)。如果它有任何共同点,则统一这些子列表。

例如,对于这个例子,我的最终答案应该是这样的:

 [[1, '34', '44', '40' '30', '41', '42', '43']]

我可以理解我应该将子列表转换为集合,然后使用 union() 和 intersection() 操作。但我坚持的是如何比较每个集合/子列表。我无法在列表上运行循环并逐个比较每个子列表,因为列表的内容会被修改,这会导致错误。

我想知道的是有什么有效的方法来比较所有子列表(转换为集合)并获得它们的并集?

原文由 Tapojyoti Mandal 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 764
1 个回答

itertools 模块简化了这个问题:

 >>> from itertools import chain
>>> list(set(chain.from_iterable(d)))
[1, '41', '42', '43', '40', '34', '30', '44']

另一种方法是将列表解压缩为 union() 的单独参数:

 >>> list(set().union(*d))
[1, '41', '42', '43', '40', '34', '30', '44']

后一种方法消除了所有重复项,并且不需要先将输入转换为集合。此外,它不需要导入。

原文由 Raymond Hettinger 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题