如何让itemgetter从列表变量中获取输入?

pdu*_*ois 4 python operator-keyword

如何将itemgetter与list变量一起使用而不是整数?例如:

from operator import itemgetter
z = ['foo', 'bar','qux','zoo']
id = [1,3]
Run Code Online (Sandbox Code Playgroud)

我这样做没问题:

In [5]: itemgetter(1,3)(z)
Out[5]: ('bar', 'zoo')
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时它给出了错误:

In [7]: itemgetter(id)(z)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-7-7ba47b19f282> in <module>()
----> 1 itemgetter(id)(z)

TypeError: list indices must be integers, not list
Run Code Online (Sandbox Code Playgroud)

如何让itemgetter正确地从列表变量中获取输入,即使用id

Chr*_*ian 9

当你这样做时:

print itemgetter(id)(z)
Run Code Online (Sandbox Code Playgroud)

你传递一个listitemgetter,而它预计指数(整数).

你能做什么?您可以解压缩list使用*:

print itemgetter(*id)(z)
Run Code Online (Sandbox Code Playgroud)

为了更好地可视化,以下两个调用都是等效的:

print itemgetter(1, 2, 3)(z)
print itemgetter(*[1, 2, 3])(z)
Run Code Online (Sandbox Code Playgroud)


Ash*_*ary 5

使用参数解包

>>> indices = [1,3]
>>> itemgetter(*indices)(z)
('bar', 'zoo')
Run Code Online (Sandbox Code Playgroud)

而且不要id用作变量名,它是一个内置函数。