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

如何高效通过索引列表获取列表元素?解决TypeError问题

高效获取列表指定索引元素的几种方法

为什么原代码报错

Python普通列表仅支持整数、切片作为索引,无法直接用列表做索引,所以self.hand[self.known_index]会抛出TypeError: list indices must be integers or slices, not list。以下是几种比手动循环更高效的实现方式:


1. 列表推导式(最常用、Pythonic)

这是最简洁且性能优异的写法,内部经过优化,比手动写for循环更利落:

known_cards = [self.hand[i] for i in self.known_index]

代入你的数据会直接得到[4,9],可读性强,代码量少。

2. 使用operator.itemgetter(性能最优)

标准库operator模块的itemgetter是底层C实现的工具,适合批量获取索引元素,尤其适合需要重复使用该逻辑的场景:

from operator import itemgetter

# 解包索引列表,生成获取器
getter = itemgetter(*self.known_index)
# 获取元素并转成列表
known_cards = list(getter(self.hand))

这种方式性能比列表推导式略优,处理大量索引时优势更明显。

3. numpy数组(适合大数据量场景)

如果业务涉及大规模数据处理,numpy数组支持直接用列表索引,操作效率极高:

import numpy as np

hand_np = np.array(self.hand)
known_cards = hand_np[self.known_index].tolist()

注意:小规模列表没必要引入numpy,反而会增加额外开销,适合数据量较大的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:05:33