标准Python列表/数组有没有类似NumPy索引数组的等效索引方法?
类numpy花式索引的原生Python实现方案
原生Python列表和标准库array模块的数组都没有直接支持a[索引列表]这种语法,但可以通过简单写法实现完全一致的效果,无需依赖第三方库。
原生Python列表实现
有两种常用实现方式:
- 列表推导式,写法简单易读,适合绝大多数场景:
a = [1, 2, 3, 4] i = [3, 0, 1] res = [a[idx] for idx in i] print(res) # 输出 [4, 1, 2]
- 借助
operator.itemgetter实现,索引数量较多时代码更简洁:
from operator import itemgetter a = [1, 2, 3, 4] i = [3, 0, 1] res = itemgetter(*i)(a) # 输出默认是元组,需要转列表的话加一层list()即可 print(res) # 输出 (4, 1, 2)
标准库array数组实现
标准库的array.array是C实现的同类型高效数组,同样不支持花式索引语法,可参考列表的处理方式,需要保留array类型的话对结果重新构造即可:
import array a = array.array('i', [1, 2, 3, 4]) i = [3, 0, 1] res = array.array('i', (a[idx] for idx in i)) print(res) # 输出 array('i', [4, 1, 2])
如果需要高频处理这类索引需求,还是更推荐使用numpy,性能远高于原生Python写法,适合大量数据的计算场景。
内容的提问来源于stack exchange,提问作者Paul Jurczak
相关产品推荐
相关产品推荐

