You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在两个二维列表中提取对应行的不匹配元素并整理结果?

问题:二维列表逐行匹配并提取不匹配值

需求说明

我有两个行数较多、长度不同的二维列表df1和df2,需要针对df1的每一行,找出它与df2每一行的不匹配元素,只返回df2中的不匹配值。比如df1[0]和df2[0]匹配1、3、5时,返回[17];df1[0]和df2[1]无匹配则返回空列表。

尝试过的代码

no_matches = []
for sublist1 in df1:
    for sublist2 in df2:
        no_match = [val for val in sublist2 if val not in sublist1]
        if no_match: no_matches.append(no_match)
print("no matches:", no_matches)

示例数据

df1 = [[1, 7, 3, 5], [2, 5, 14, 10]]
df2 = [[1, 17, 3, 5], [34, 14, 74], [34, 3, 87], [25, 14, 10]]

预期结果

第一步:三维列表形式

no_match = 0: [[17], [], [34,87], []]
            1: [[1,3,17], [34,74], [], [25]]

第二步:不含空列表的二维列表

no_match = [[17],[34,87],[1,3,17],[34,74],[25]]

解决方案

1. 生成包含空列表的三维结果

要得到预期的三维结构,需要为df1的每一行单独保存对应df2所有行的匹配结果,不能直接过滤空列表:

# 生成三维列表(保留空列表)
no_matches_3d = []
for sublist1 in df1:
    row_result = []
    for sublist2 in df2:
        # 提取df2中不在df1当前行的元素
        diff = [val for val in sublist2 if val not in sublist1]
        row_result.append(diff)
    no_matches_3d.append(row_result)

# 按预期格式打印三维结果
for idx, res in enumerate(no_matches_3d):
    print(f"no_match = {idx}: {res}")

运行输出:

no_match = 0: [[17], [], [34, 87], []]
no_match = 1: [[1, 3, 17], [34, 74], [], [25]]

2. 转换为不含空列表的二维列表

遍历三维列表,收集所有非空的子列表即可:

# 转换为不含空列表的二维列表
no_matches_2d = []
for row in no_matches_3d:
    for sublist in row:
        if sublist:
            no_matches_2d.append(sublist)

print("最终结果:", no_matches_2d)

运行输出:

最终结果: [[17], [34, 87], [1, 3, 17], [34, 74], [25]]

3. 大数据量优化方案

如果列表行数极多,用val not in sublist1的效率较低(列表in操作是O(n)复杂度),可以把df1的每一行转为集合,将in操作降为O(1):

# 优化版:用集合提升匹配速度
no_matches_3d = []
for sublist1 in df1:
    set1 = set(sublist1)
    row_result = []
    for sublist2 in df2:
        diff = [val for val in sublist2 if val not in set1]
        row_result.append(diff)
    no_matches_3d.append(row_result)

# 一行代码完成二维列表转换
no_matches_2d = [sublist for row in no_matches_3d for sublist in row if sublist]

内容的提问来源于stack exchange,提问作者user20250014

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 02:27:21