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

如何通过索引列表访问Python多维列表且避免大量复制?

解决Python多维列表按索引列表访问元素的问题

你之前的循环赋值方式根本不会产生大量复制——这是对Python列表索引机制的误解。Python中列表的索引操作list[idx]返回的是对应元素的引用,而非元素的副本。你的代码里data_tmp = data_tmp[elem]只是让变量指向嵌套结构里的下一层对象,完全没有复制数据的操作,效率很高。

下面给你几种更简洁但同样无复制的实现方式:

方式一:保留循环(最直观且高效)

你的原始代码其实已经是最优解之一,稍作封装更易用:

def get_nested_element(data, indices):
    current = data
    for idx in indices:
        current = current[idx]
    return current

调用示例:

data = [[[1,2], [3,4]], [[5,6], [7,8]]]
indices = [0, 1, 0]
print(get_nested_element(data, indices))  # 输出3

方式二:用reduce简化代码

借助functools.reduce和operator.getitem可以把循环写成一行,底层逻辑和循环完全一致,同样无复制:

from functools import reduce
import operator

def get_nested_element(data, indices):
    return reduce(operator.getitem, indices, data)

这个写法更简洁,适合追求代码紧凑的场景。

额外说明

  • 如果访问的是可变元素(比如子列表),返回的是原对象的引用,修改返回值会直接改变原多维列表的内容;
  • 如果访问的是不可变元素(比如整数、字符串),返回的是值本身,但这是不可变对象的特性,和复制无关,也不会额外占用内存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:12:04