2014-01-08 44 views
2

我想从迭代中检索特定索引。这将相当于:解压缩特定索引

In [7]: def f(): 
    ...:  return [1,2,3,4,5] 
In [8]: (_, x, _, y, _) = f() 
In [9]: x, y 
Out[9]: (2, 4) 

但我不想计算迭代多次或者是很长,我不想写太多_小号

我的问题是纯粹出于好奇心,我实际上使用了一个局部变量,如上所示。

编辑

一种解决方案是简单地使用与符号iterable[start:end:step]切片:

In [24]: (x, y) = f()[1:4:2] 
In [25]: x, y 
Out[25]: (2, 4)` 

EDDIT BIS:如果您需要检索每n th元素 使用切片工程一个迭代,但如果你想索引2,35,6使用operator.itemgetter(2,3,5,6)(lst)元素似乎是一个更好的解决方案:

In [8]: operator.itemgetter(2,3,5,6)(range(10)) 
Out[8]: (2, 3, 5, 6) 
+1

如果你知道你想要的索引,为什么不使用切片? – MattDMo

+0

你有没有尝试过吗? – Totem

+0

@MattDMo切片可以完美工作,如果使用'iterable [start:end:step]'符号,甚至可以用于非连续索引。谢谢你没有想到它! – bvidal

回答

2

一个稍微迂回的方式是使用itemgetter函数从operator模块。

import operator 
m = operator.itemgetter(2,3) 
x, y = m([1,2,3,4,5]) 

itemgetter的呼叫创建一个可调用这需要一个可迭代L并返回L[2]L[3]