2011-09-08 53 views
4

我有一个整数列表应该用作另一个列表的索引来检索一个值。比方说,我们有以下阵列如何在Python中访问整数列表的特定位置?

a = [1,2,3,4,5,6,7,8,9] 

我们可以利用得到的具体内容如下代码

import operator 
    operator.itemgetter(1,2,3)(a) 

它将返回第二,第三和第四个项目。

可以说我有另一个列表

b=[1,2,3] 

但是,如果我尝试运行下面的代码它得到一个错误

operator.itemgetter(b)(a) 

我想知道,如果有人可以帮我请。我认为它只是我必须将b转换为逗号分隔指数的问题,但并不十分确定。

非常感谢

回答

8

使用*:

operator.itemgetter(*b)(a) 

在函数调用手段*,解开这个值,并使用其元素作为参数传递给函数。

0

itemgetter的第一个参数需要是一个元组。你可以这样做:

apply(operator.itemgetter, tuple(b))(a) 

有可能是这样做的清洁/更idomatic方式,但这并工作的例子。

3

既然您已为问题与numpy的标签,你也可以考虑做一个阵列,使得这部作品:

from numpy import array 
a = array([1,2,3,4,5,6,7,8,9]) 
b = [1,2,3] 
a[b] 
+0

尽管数组(operator.itemgetter(* b)(a))可能不太清晰,但如果需要输出为数组,则它比数组(a)[b]更快。因此,如果输出应该是一个数组,并且您不关心易读性,那么还是应该使用Ned的解决方案。 – Daan

0

你还可以尝试:

map(a.__getitem__, b) 

的代码返回Python 2中的列表或Python 3中的迭代器。如果您需要将其转换为元组,请将其放入tuple()

相关问题