【问题标题】:Unpacking specific indexes解包特定索引
【发布时间】: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,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)

【问题讨论】:

  • 如果你知道你想要的索引,为什么不直接使用切片呢?
  • 您自己尝试过吗?
  • @MattDMo 切片可以完美运行,如果使用 iterable[start:end:step] 表示法,甚至可以用于非连续索引。谢谢 只是没想到!
  • 也...不确定上下文,但可能会看到:stackoverflow.com/questions/19503455/caching-a-generator 如果您的部分问题是您不知道输入是否是可迭代的...跨度>

标签: python slice iterable-unpacking


【解决方案1】:

一种稍微迂回的方法是使用operator 模块中的itemgetter 函数。

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

itemgetter 的调用创建了一个可调用对象,它接受一个可迭代的L 并返回L[2]L[3]

【讨论】:

    猜你喜欢
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多