如何高效通过索引列表获取列表元素?解决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
相关产品推荐
相关产品推荐

