Descomprimiendo índices específicos
-
20-12-2019 - |
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)
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]
.