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

如何在不等长列表中匹配元素并返回对应行标识

问题与解决方案

问题描述

我有两个嵌套列表:

  • df1:无行标识,每个子列表包含一组待匹配元素
  • df2:每个子列表的首个元素为行标识,后续元素是匹配内容

需要实现:遍历df1中每个元素,找到该元素在df2任意子列表(排除行标识列)中出现的所有行,返回对应的行标识,结果结构与df1完全对应。

示例输入

df1 = [[2,4,6,8,9,10],[10,13,15,17,26,44],[27,28,34,37,40]]

df2 = [[120,1,2,4,5,6,8],[20,5,6,20,22,23,34],[132,8,12,13,34,45,46],[56,9,10,14,29,32,33],[29,1,22,13,23,33,35],[167,1,6,7,8,9,10],[15,0,2,3,5,6,8]] 

期望输出

result = [[[120,120,120,120],[20,],[132],[56],[56],[167,167,167,167,],[15,15,15]],[[132],[56],[29],[167]],[[20],[132]]]

解决方案

用Python实现,先构建元素到行标识的映射字典提升查找效率,再生成对应结果:

# 构建元素到行标识的映射(自动去重同一行的重复元素)
element_to_ids = {}
for row in df2:
    row_id = row[0]
    # 对当前行的元素去重,避免同一行多次添加相同行标识
    unique_elements = set(row[1:])
    for elem in unique_elements:
        if elem not in element_to_ids:
            element_to_ids[elem] = []
        element_to_ids[elem].append(row_id)

# 生成与df1结构对应的结果
result = []
for sublist in df1:
    current_sub_result = []
    for elem in sublist:
        # 若元素无匹配则返回空列表
        current_sub_result.append(element_to_ids.get(elem, []))
    result.append(current_sub_result)

print(result)

代码说明

  1. 映射字典构建:

    • 遍历df2每一行,提取行标识和该行的元素集合(去重)
    • 将每个元素与对应的行标识绑定,后续查找只需直接取值,大幅提升效率
  2. 结果生成:

    • 完全复刻df1的嵌套结构,每个元素对应其在df2中匹配到的所有行标识列表
    • 使用get方法处理无匹配元素的情况,返回空列表保证结构一致性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:20:42