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

如何高效匹配两个多维列表/数组并优化结果?

多维列表匹配优化实现

需求说明

需要处理两个21行的多维列表,实现从a1中查找与b1的匹配项,先生成包含空列表的匹配结果,再过滤掉所有空列表得到最终结果。

示例数据

a1 = [
    [
        [91,15,25], [4,14,25]
    ],
    [
        [91,115,215], [41,154,148]
    ]
]

b1 = [
    [
        [41,4,14], [3,5,14]
    ],
    [
        [266,41,73], [366,13,91]
    ]
]

原有实现问题

原有代码通过索引切片+多层嵌套循环+集合交集实现,但每次循环都重复将子列表转为集合,处理大数据量时耗时较长,且代码冗余:

for l in a1[0]:
    result = []
    for k in b1[0]:
        result.append(list(set(l) & set(k)))
    print(result)

for l in a1[1]:
    result = []
    for k in b1[1]: 
        result.append(list(set(l) & set(k)))
    print(result)

优化方案

核心思路

  • 提前将a1和b1的所有子列表转换为集合,避免循环中重复转换的开销
  • 使用嵌套列表推导式简化代码结构,提升执行效率
  • 分两步生成目标结果:先得到包含空列表的result1,再过滤空列表得到result2

优化代码

# 提前转换所有子列表为集合,减少重复计算
a_sets = [[set(sublist) for sublist in arr] for arr in a1]
b_sets = [[set(sublist) for sublist in arr] for arr in b1]

# 生成包含空列表的result1
result1 = [
    [list(a_set & b_set) for b_set in b_arr]
    for a_arr, b_arr in zip(a_sets, b_sets)
]

# 过滤空列表得到result2
result2 = [
    [match for match in arr if match]
    for arr in result1
]

print("result1:", result1)
print("result2:", result2)

输出结果

# result1输出
[[[], [], [4, 14], [14]], [[], [91], [41], []]]
# result2输出
[[[4, 14], [14]], [[91], [41]]]

优势说明

  • 提前转换集合:将每个子列表转集合的操作只执行一次,而非每次循环都执行,大幅减少大数据量下的计算开销
  • 列表推导式:相较于显式for循环,Python底层对列表推导式的优化更好,执行速度更快
  • 代码简洁:通过zip配对a1和b1的对应层级,避免硬编码索引,扩展性更强(适配任意行数的输入)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:40:31