如何在两个二维列表中提取匹配值与不匹配值
提取二维列表间的匹配与不匹配值
我有两个行数超200的二维列表df1和df2,需要针对df2的每个子列表,找出它与df1所有元素的匹配值和不匹配值,分别返回两个结果列表。
示例输入
df1 = [[1, 7, 3, 5], [5, 5, 14, 10]] df2 = [[1, 17, 3, 5], [34, 14, 74], [34, 3, 87], [25, 14, 10]]
期望输出
no_match = [[17],[34,87],[34,74],[25]] match = [[1,3,5],[3],[14],[14,10]]
高效解决方案
由于列表行数较多,先将df1的所有元素合并为一个集合(集合的成员检测效率远高于列表),再遍历df2的每个子列表进行匹配判断:
# 整合df1所有元素为集合,提升查询效率 df1_all = set() for sublist in df1: df1_all.update(sublist) match = [] no_match = [] # 处理df2的每个子列表 for sub in df2: matched = [] unmatched = [] for num in sub: if num in df1_all: matched.append(num) else: unmatched.append(num) match.append(matched) no_match.append(unmatched) # 输出结果 print("match =", match) print("no_match =", no_match)
说明:示例期望输出中第二个匹配项标注为[3],但按逻辑df2的第二个子列表[34,14,74]中与df1匹配的是14,上述代码会输出符合逻辑的结果。若需求是df2子列表需与df1的特定子列表匹配,可调整代码逻辑遍历df1的子列表逐一对比。
内容的提问来源于stack exchange,提问作者user20250014
相关产品推荐
相关产品推荐

