2009-10-05 13 views
7

Sto facendo una lista 2D e vorrei inizializzarla con una lista di comprensione. Vorrei che faccia qualcosa di simile:Python: Comprensione delle liste per assegnare valori diversi

[[x for i in range(3) if j <= 1: x=1 else x=2] for j in range(3)] 

quindi dovrebbe restituire qualcosa del genere:

[[1,1,1], 
[1,1,1], 
[2,2,2]] 

Come potrei andare a fare questo?

Grazie per il vostro aiuto.

risposta

14

Sembra come se siete alla ricerca di qualcosa di simile:

[[1 if j <= 1 else 2 for i in range(3)] for j in range(3)] 

Il Python conditional expression è un po 'diverso da quello che potrebbe essere utilizzato per se vieni da qualcosa come C o Java:

L'espressione x if C else y valuta prima C (non x); se C è vero, x viene valutato e viene restituito il suo valore; altrimenti, y viene valutato e viene restituito il suo valore.

Un modo un po 'più breve per fare la stessa cosa è:

[[1 if j <= 1 else 2]*3 for j in range(3)] 
+0

Questo è un bene dato che posso scalare facilmente cambiando la dimensione della gamma e modificare l'istruzione condizionale. Grazie! – Nope

14

risposta di Greg è corretta, anche se un'espressione molto più semplice e veloce per produrre il risultato desiderato sarebbe

[[j] * 3 for j in (1, 1, 2)] 

per esempio, ricorda che for non è necessario applicare solo a range ;-), esiste una moltiplicazione di elenchi e così via ;-).

+0

Mi piace questa risposta, pulito – Juparave

+0

Ciò consente alla tabella di essere ancora modificabile? diciamo che voglio cambiare [0] [0] a 10, cambierà nessuno degli altri valori? – Nope

+0

@Casey - No, non cambierà nessuno degli altri valori. –

1

Prova che

>>> [[(1 if j<1 else 2) for i in range(3)] for j in range(3)] 
[[1, 1, 1], [2, 2, 2], [2, 2, 2]] 

La seconda volta j = 1 in modo j < 1 non riesce

Problemi correlati