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

如何从列表中选取多组指定索引元素,解决itemgetter不支持多组索引的问题

报错根因

itemgetter要求传入的参数是多个独立的整数/切片索引,你传入*a等于把a里的两个元组(1,2,7)、(1,2,8)直接作为索引传给了它,列表不支持用元组作为索引,所以抛出对应的类型错误。

可落地的实现方案

方案1:遍历每组索引调用itemgetter

适合需要保留itemgetter使用习惯的场景:

import itertools
from operator import itemgetter

labels=['C1','C2','C3','C4','C5','C6','C7','C8','C10','C13','C14','C15']
indexlist = list(itertools.combinations(range(1, 10), 3))
ixs= [4,5]
a=[indexlist[ix] for ix in ixs]

# 遍历每组索引取值
res = [itemgetter(*idx_group)(labels) for idx_group in a]
# 按要求打印输出
for group in res:
    print(*group)

运行后输出结果:

C2 C3 C8
C2 C3 C10

方案2:纯列表推导式实现,无需额外导入

写法更轻量化,不需要引入operator模块:

import itertools

labels=['C1','C2','C3','C4','C5','C6','C7','C8','C10','C13','C14','C15']
indexlist = list(itertools.combinations(range(1, 10), 3))
ixs= [4,5]
a=[indexlist[ix] for ix in ixs]

res = [tuple(labels[i] for i in idx_group) for idx_group in a]
for group in res:
    print(*group)

运行效果和方案1完全一致。

方案3:numpy批量索引,适合大规模数据场景

如果处理的元素量级很大,用numpy的向量化索引效率更高:

import itertools
import numpy as np

labels = np.array(['C1','C2','C3','C4','C5','C6','C7','C8','C10','C13','C14','C15'])
indexlist = list(itertools.combinations(range(1, 10), 3))
ixs= [4,5]
a = np.array([indexlist[ix] for ix in ixs])

# 一步完成多组索引取值
res = labels[a]
for group in res:
    print(*group)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:54:03