Pregunta

Quiero recuperar índices específicos de un iterable.Eso sería equivalente a:

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

Pero no quiero calcular el iterable varias veces o es muy largo y no quiero escribir demasiados. _s

Mi pregunta es puramente por curiosidad y en realidad estoy usando variables locales como se muestra arriba.

EDITAR:

Una solución es simplemente utilizar el corte con la notación iterable[start:end:step]:

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

EDITAR BIS:Usar el corte funciona si necesita recuperar cada nésimos elementos en un iterable pero si quieres elementos en el índice 2,3 y 5,6 usando operator.itemgetter(2,3,5,6)(lst) parece ser una mejor solución:

In [8]: operator.itemgetter(2,3,5,6)(range(10))
Out[8]: (2, 3, 5, 6)
¿Fue útil?

Solución

Una forma ligeramente indirecta es utilizar el itemgetter función de la operator módulo.

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

el llamado a itemgetter crea un invocable que toma un iterable L y regresa L[2] y L[3].

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top