Disimballaggio di indici specifici
-
20-12-2019 - |
Domanda
Voglio recuperare indici specifici da un Iterable.Questo sarebbe 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)
.
Ma non voglio calcolare i più volte più volte o è molto lungo e non voglio scrivere troppi _
s
La mia domanda è puramente per curiosità e sto effettivamente utilizzando le variabili locali come mostrato sopra.
Modifica :
Una soluzione è semplicemente usare affettare con la notazione iterable[start:end:step]
:
In [24]: (x, y) = f()[1:4:2]
In [25]: x, y
Out[25]: (2, 4)`
.
EddIt Bis :
Utilizzando i lavori di taglio se è necessario recuperare ogni elementi n
th in un iterabile ma se si desidera che gli elementi in indice 2,3
e 5,6
utilizzando operator.itemgetter(2,3,5,6)(lst)
sembra essere una soluzione migliore:
In [8]: operator.itemgetter(2,3,5,6)(range(10))
Out[8]: (2, 3, 5, 6)
. Soluzione
Un modo leggermente rotonda è quello di utilizzare la funzione itemgetter
dal modulo operator
.
import operator
m = operator.itemgetter(2,3)
x, y = m([1,2,3,4,5])
.
La chiamata a itemgetter
crea un chiamino che prende un L
iterabile e restituisce L[2]
e L[3]
.