2010-06-17 19 views
5

In python, quando si ha un elenco di tuple, è possibile scorrere su di esse. Per esempio quando si dispone di punti 3D allora:Come posso scorrere solo la prima variabile di una tupla

for x,y,z in points: 
    pass 
    # do something with x y or z 

cosa succede se si desidera utilizzare solo la prima variabile, o la prima e la terza. C'è qualche simbolo di salto in python?

risposta

8

C'è qualcosa che ti impedisce di non toccare le variabili che non ti interessano? C'è un uso convenzionale del trattino basso in Python per indicare la variabile che non ti interessa. Es .:

for x, _,_ in points: 
    print(x) 

È necessario capire che questo è solo una convenzione e non ha alcuna incidenza sulle prestazioni.

+1

Questo è stato un esempio. Normalmente posso avere 4 variabili in una tupla, e sono troppo pigro per inventare buoni nuovi nomi di variabili per loro. –

+2

@Peter: non è necessario avere * buoni * nomi per le variabili che non si intende utilizzare. – SilentGhost

+1

Infatti '_' è probabilmente il nome della variabile meno descrittivo che potresti eventualmente ottenere ;-) O lo sarebbe, se non fosse per questa convenzione. –

7

Sì, il carattere di sottolineatura:

>>> a=(1,2,3,4) 
>>> b,_,_,c = a 
>>> b,c 
(1, 4) 

Questo non è esattamente 'saltare', solo una convenzione. Underscore variabile ottiene ancora il valore assegnato:

>>> _ 
3 
+0

Le informazioni riguardanti '_' sono interessanti. Quindi 'a, a, a = (1, 2, 3)' funziona davvero ... – Dario

+0

@Dario Non lo consiglierei, dato che è difficile da leggere e capire quale valore si aspetta in un – unbeli

+0

Sì, non lo userei nemmeno * per questo motivo, ma pensavo che Python lo avrebbe quindi respinto. – Dario

5

Un modo comune per farlo è quello di utilizzare underscore per le variabili non utilizzate:

for x, _, z in points: 
    # use x and z 

Questo in realtà non fa nulla di diverso da quello che hai scritto. Il carattere di sottolineatura è una variabile normale come qualsiasi altra. Ma questo mostra alla gente che legge il tuo codice che non intendi usare la variabile.

Non è consigliabile eseguire questa operazione nel prompt interattivo poiché _ ha un significato speciale lì: il valore dell'ultima istruzione/espressione dell'ultima esecuzione.

3

Anche se questo non è così liscia come stai chiedendo, forse questo è il più leggibile per le vostre intenzioni di dare nomi significativi solo per gli indici tuple ti stanno a cuore:

for each in points: 
    x = each[0] 
    # do something with x 
0

In Python 3.1 è possibile usa un asterisco davanti a un identificatore sul lato sinistro di un compito di tupla e succhia tutto ciò che è rimasto. Questo costrutto gestirà un numero variabile di elementi tupla. Come questo:

>>> tpl = 1,2,3,4,5 
>>> a, *b = tpl 
>>> a 
1 
>>> b 
>>> (2, 3, 4, 5) 

o in vari ordini e combinazioni:

>>> a, *b, c = tpl 
>>> a 
1 
>>> b 
(2, 3, 4) 
>>> c 
5 

Così, per caso hai chiesto, in cui si è interessati solo il primo elemento, utilizzare * _ per aspirare e scartare gli articoli rimanenti di cui non ti interessa:

>>> a, *_ = tpl 
>>> a 
1 
Problemi correlati