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

如何高效创建指定位置填充指定值的列表?

高效生成目标列表的实现方案

需求明确

给定值列表lst1和位置模板列表lst2,需将lst1中的每个子列表与lst2中的每个位置模板组合,生成目标列表:

  • 每个位置模板包含两组1-based位置,分别对应值子列表的两个元素
  • 将对应元素填充到模板指定的位置,得到最终结果

示例数据

值列表:

lst1 = [[8,9],[6,7]]

位置模板列表:

lst2 = [[[1,2],[3,4]],[[1,3],[2,4]],[[1,4],[2,3]]]

期望输出:

result = [[8,8,9,9],[8,9,8,9],[8,9,9,8],[6,6,7,7],[6,7,6,7],[6,7,7,6]]

高效实现思路

避免先创建空列表再逐个替换的低效操作,通过预生成位置映射+列表推导式实现:

  1. 预解析位置模板,将每个模板的1-based位置转换为0-based索引到值索引(0或1)的映射,仅处理一次lst2
  2. 利用Python优化后的列表推导式,通过映射直接取值生成结果,减少冗余计算

代码实现

lst1 = [[8,9],[6,7]]
lst2 = [[[1,2],[3,4]],[[1,3],[2,4]],[[1,4],[2,3]]]

# 预生成位置模板的索引映射:0-based索引 → 值子列表的索引(0或1)
template_maps = []
for pos_pair in lst2:
    pos1, pos2 = pos_pair
    idx_map = {}
    # 映射第一组位置到值子列表的第0个元素
    for p in pos1:
        idx_map[p-1] = 0
    # 映射第二组位置到值子列表的第1个元素
    for p in pos2:
        idx_map[p-1] = 1
    template_maps.append(idx_map)

# 生成最终结果
result = [
    [vals[idx_map[i]] for i in range(4)]
    for vals in lst1
    for idx_map in template_maps
]

print(result)

效率说明

  • 预生成映射:仅对lst2做一次解析,避免后续循环中重复处理位置信息
  • 直接索引取值:跳过条件判断或多次赋值操作,利用Python列表的O(1)索引特性
  • 列表推导式:底层由C实现,比显式嵌套for循环执行速度更快

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 13:27:42