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

Python中如何基于现有对象列表与索引列表创建新对象列表?

解决根据索引列表提取列表元素的问题

首先来说说你之前尝试的代码为什么不行:

  • 你写的new_list = [list[indexes[0]] + list[indexes[1]]],本质是把两个位置的元素相加后放到一个列表里,而不是把两个元素分别放进新列表。比如如果原列表是[10, 20, 30],索引是[0,1],这行代码会生成[30]而不是[10,20],完全不是你想要的结果。
  • 更关键的是,如果原列表里的对象不支持+运算符(比如自定义类实例、布尔值这类),直接用+会触发TypeError,这就是代码无法运行的核心原因。
  • 另外这种写法只能处理固定2个索引的情况,完全没法适配任意长度的索引列表。

接下来给你几种通用的解决方法,不管索引列表是多长都能用:

方法1:列表推导式(最推荐,简洁直观)

这是Python里最常用的写法,语法清晰,可读性强:

# 注意:不要用list作为变量名,会覆盖Python内置的list类型,这里改用original_list
original_list = ["a", "b", "c", "d"]
indexes = [0, 2, 3]

new_list = [original_list[i] for i in indexes]
print(new_list)  # 输出: ['a', 'c', 'd']

方法2:使用operator.itemgetter(适合批量提取,效率更高)

如果需要处理大量数据,这个方法的执行效率会比列表推导式略高一点,因为它是用C实现的底层操作:

from operator import itemgetter

original_list = ["a", "b", "c", "d"]
indexes = [0, 2, 3]

# 用*解包索引列表,itemgetter会返回一个可调用对象,最后转成列表
new_list = list(itemgetter(*indexes)(original_list))
print(new_list)  # 输出: ['a', 'c', 'd']

方法3:循环遍历(适合新手理解逻辑)

如果你刚接触Python,这种逐次添加的方式更直观,容易理解每一步的操作:

original_list = ["a", "b", "c", "d"]
indexes = [0, 2, 3]

new_list = []
for idx in indexes:
    new_list.append(original_list[idx])
print(new_list)  # 输出: ['a', 'c', 'd']

最后再强调一下:永远不要用Python的内置类型名(比如list、str、dict)作为变量名,否则会覆盖内置功能,导致后续出现莫名其妙的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:12:10