![](/img/trans.png)
[英]How can I take a str/.txt input and make it into a list for pyton
[英]How can I make itemgetter to take input from list variable?
如何将itemgetter与list变量一起使用而不是整数? 例如:
from operator import itemgetter
z = ['foo', 'bar','qux','zoo']
id = [1,3]
我这样做没问题:
In [5]: itemgetter(1,3)(z)
Out[5]: ('bar', 'zoo')
但是当我这样做时它给出了错误:
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
如何让itemgetter正确地从列表变量中获取输入,即使用id
?
当你这样做时:
print itemgetter(id)(z)
您将list
传递给itemgetter
,而它期望索引(整数)。
你能做什么? 您可以使用*
解压缩list
:
print itemgetter(*id)(z)
为了更好地可视化,以下两个调用都是等效的:
print itemgetter(1, 2, 3)(z)
print itemgetter(*[1, 2, 3])(z)
你可以看看https://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists
itemgetter(*id)(z)
将得到你想要的,正如Awini Haudhary已经指出的那样。 在某些情况下,解包dict也很有用。
实际问题是, itemgetter
期望将项目列表作为单个参数传递,但是您传递的是单个列表。 所以,你可以在Aशwiniचhaudhary的回答中解压缩,或者你可以apply
id,像这样
print apply(itemgetter, ids)(z)
# ('bar', 'zoo')
注意: apply
实际上已弃用。 总是喜欢打开包装。 我提到的仅仅是为了完整性而apply
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.