Python如何合并列表中存在单个公共数值的元组元素?
二元组合并实现方案
实现思路
- 遍历所有两两组合的二元组,判断两个组是否仅共享1个公共元素
- 对符合条件的两个组,合并所有元素后去重,生成目标长度的合并元组
- 对合并结果做全局去重,避免重复输出相同的元组
可直接运行的代码示例
# 原始二元组列表 edges = [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 0), (0, 6), (1, 7), (1, 8), (2, 9), (2, 10), (3, 11), (4, 12), (4, 13), (5, 14), (5, 15)] merged_set = set() # 遍历所有两两不同的二元组组合 for idx1 in range(len(edges)): group1 = edges[idx1] set1 = set(group1) for idx2 in range(idx1 + 1, len(edges)): group2 = edges[idx2] set2 = set(group2) # 仅当两个组只有1个公共元素时合并 common_elements = set1 & set2 if len(common_elements) == 1: # 合并后排序转元组,方便去重 merged_group = tuple(sorted(set1 | set2)) merged_set.add(merged_group) # 转成列表查看结果 final_result = list(merged_set) print(final_result)
结果说明
运行代码后输出的结果就包含你举例的(0, 1, 2)、(0, 1, 7)等符合要求的合并元组,如果你不需要排序后的结果,去掉sorted方法即可。
你之前的代码仅能处理两个指定列表的合并,没有覆盖所有二元组的两两组合判断逻辑,所以无法批量得到全部合并结果。
内容的提问来源于stack exchange,提问作者pythonnewbie3
相关产品推荐
相关产品推荐

