如何匹配两个二维列表?实现跨列表元素匹配及结果返回
解决方案
问题分析
你需要实现的逻辑是:遍历df1中的每个子列表,找出df2中所有与它存在交集的子列表,将每对有交集的子列表合并后排序,最终按df1的分组整理结果。
实现代码
def merge_matching_lists(df1, df2): result = [] for sublist1 in df1: current_group = [] set1 = set(sublist1) for sublist2 in df2: # 判断两个子列表是否有交集 if set1 & set(sublist2): # 合并两个子列表并排序 merged_sorted = sorted(sublist1 + sublist2) current_group.append(merged_sorted) result.append(current_group) return result # 测试示例数据 df1 = [[2,4,6,8,9,10],[10,13,15,17,26,44],[27,28,34,37,40]] df2 = [[1,2,4,5,6,8],[5,6,20,22,23,34],[8,12,13,34,45,46],[9,10,14,29,32,33],[1,22,13,23,33,35],[1,6,7,8,9,10],[0,2,3,5,6,8]] result = merge_matching_lists(df1, df2) # 格式化输出结果 for idx, group in enumerate(result): print(f"Group {idx+1}:") for lst in group: print(lst)
代码解释
- 交集判断:将子列表转为集合,利用集合交集操作快速判断是否存在共同元素,比遍历列表效率更高。
- 合并排序:把有交集的两个子列表拼接后,用
sorted()函数排序,得到有序的合并结果。 - 分组整理:按
df1的子列表顺序,把对应符合条件的合并结果整理成大列表,结构与需求匹配。
与示例结果的差异说明
你的示例结果中第一个分组的第一个元素少了一个4,这应该是笔误——按合并逻辑,df1和df2的第一个子列表都包含4,合并后应出现两次4,代码输出结果是正确的。另外,df2第五个子列表与df1第二个子列表有共同元素13,代码会将其合并结果加入第二个分组,若你的示例是刻意排除该元素,可在交集判断时添加额外过滤条件。
内容的提问来源于stack exchange,提问作者user20250014
相关产品推荐
相关产品推荐

