【发布时间】:2014-01-27 03:44:23
【问题描述】:
我想从一个可迭代对象中检索特定索引。这相当于:
In [7]: def f():
...: return [1,2,3,4,5]
In [8]: (_, x, _, y, _) = f()
In [9]: x, y
Out[9]: (2, 4)
但我不想多次计算 iterable 或者它很长而且我不想写太多_s
我的问题纯粹是出于好奇,我实际上正在使用如上所示的局部变量。
编辑:
一种解决方案是简单地使用带有符号iterable[start:end:step] 的切片:
In [24]: (x, y) = f()[1:4:2]
In [25]: x, y
Out[25]: (2, 4)`
EDDIT BIS:
如果您需要检索可迭代中的每个 nth 元素,但如果您想要索引 2,3 和 5,6 处的元素,则使用切片可以使用 operator.itemgetter(2,3,5,6)(lst) 似乎是一个更好的解决方案:
In [8]: operator.itemgetter(2,3,5,6)(range(10))
Out[8]: (2, 3, 5, 6)
【问题讨论】:
-
如果你知道你想要的索引,为什么不直接使用切片呢?
-
您自己尝试过吗?
-
@MattDMo 切片可以完美运行,如果使用
iterable[start:end:step]表示法,甚至可以用于非连续索引。谢谢 只是没想到! -
也...不确定上下文,但可能会看到:stackoverflow.com/questions/19503455/caching-a-generator 如果您的部分问题是您不知道输入是否是可迭代的...跨度>
标签: python slice iterable-unpacking