2012-06-29 12 views
6

In Python, c'è un modo per scrivere questa comprensione di lista senza la variabile "x in" (poiché è lasciata completamente inutilizzata) ? Lo stesso vale per l'espressione di un generatore. Dubito che questo succeda molto spesso, ma mi sono imbattuto in questo alcune volte ed ero curioso di sapere.Creazione di un'espressione di generatore o di una list comprehension senza variabile "x in" (ad es. Per intervallo) in Python

Ecco un esempio: (? Inoltre forse, c'è un modo più elegante per costruire questo)

week_array = ['']*7 
four_weeks = [week_array[:] for x in range(4)] 

+0

Perché non 'settimana_array * 4'? – phg

+2

@phg: Ciò comporterà 4 riferimenti alla stessa lista. –

+0

@Ignacio Oh, giusto ... lo uso per dimenticarlo, grazie! – phg

risposta

15

Non ci credo, e non c'è nulla di male nello x. Una cosa comune vedere quando un valore è inutilizzato in questo modo è quello di utilizzare un trattino basso come variabile libera, per es .:

[week_array[:] for _ in range(4)] 

Ma non è niente più che una convenzione per indicare che la variabile libera non viene usata.

2

No. Sia costruisce must hanno un iteratore, anche se il suo valore è inutilizzato.

1
week_array = ['']*7 
four_weeks = map(list, [week_array]*4) 
0

Questo è simile ad altre risposte, in quanto utilizzo la mappa, ma quello che ho fatto utilizza la stessa funzione che si sta utilizzando.

four_weeks = map(lambda i: week_array[:], range(4)) 

Inoltre, il vantaggio principale rispetto all'utilizzo _ per esempio è che potrebbe essere già utilizzato (_ è utilizzato da gettext spesso) e cambia il suo valore per l'ultimo elemento della iteratore. Vedi questo esempio:

[x for x in range(4)] 
assert x == 3, 'x should be equal to 3' 
Problemi correlati