2

说我有一个清单l

['a','b','c','d','e']

和索引列表idx

[1,3]

将返回的最简单和最有效的函数是什么:

['b','d']
4

3 回答 3

13

尝试使用这个:

[l[i] for i in idx]
于 2012-09-17T18:53:44.840 回答
7

你想要operator.itemgetter

在我的第一个示例中,我将展示如何使用它itemgetter来构造可用于任何可索引对象的可调用对象:

from operator import itemgetter
items = itemgetter(1,3)
items(yourlist)  #('b', 'd')

现在我将展示如何使用参数解包将索引存储为列表

from operator import itemgetter
a = ['a','b','c','d','e']
idx = [1,3]
items = itemgetter(*idx)
print items(a)  #('b', 'd')

当然,这给了你 a tuple,而不是 a list,但是如果你真的需要的话,从一个元组构造一个列表是微不足道的。

于 2012-09-17T18:52:39.630 回答
-1

这是一个使用列表推导的选项:

[v for i, v in enumerate(l) if i in idx]

idx如果您先转换为集合,这将更有效。

一个替代方案operator.itemgetter

import operator
operator.itemgetter(*idx)(l)

如评论中所述,[l[i] for i in idx]这可能是您最好的选择,除非idx可能包含大于长度的索引l,或者如果idx未排序并且您希望保持与 相同的顺序l

于 2012-09-17T18:52:31.660 回答