Domanda

Sto imparando Python e mi sono imbattuto in questo esempio:

W = ((0,1,2),(3,4,5),(0,4,8),(2,4,6))
b = ['a','b','c','d','e','f','g','h','i']
for row in W:
    print b[row[0]], b[row[1]], b[row[2]]

che stampa:

a b c

d e f

a e i

c e g

Sto cercando di capire perché!

Capisco che ad esempio la prima volta che la versione estesa è:

print b[(0,1,2)[0]], b[(0,1,2)[1]], b[(0,1,2)[2]]

Ma non capisco come interagisce (0,1,2). Qualcuno può offrire una spiegazione? Grazie.

(questa è una versione abbreviata di alcuni codici per un gioco di tic tac toe e funziona bene, non capisco proprio questa parte)

È stato utile?

Soluzione

scorre su una tupla di tuple, ogni riga è una tupla a tre elementi, quando la stampa accede a tre elementi dell'elenco b per indice, che è ciò che La tupla row contiene.

probabilmente, un modo leggermente meno ingombrante per farlo è:

for f, s, t in W:
    print b[f], b[s], b[t]

Altri suggerimenti

In fase di scatto, il (0,1,2) non fa nulla. È una tupla e può essere indicizzata proprio come un elenco, quindi b [(0,1,2) [0]] diventa b [0] da ( 0,1,2) [0] == 0 .

Nel primo passaggio Python esegue b [riga [0]] & # 8594; b [(0,1,2) [0]] & # 8594; b [0] & # 8594; 'a'

A proposito, per ottenere più elementi da una sequenza contemporaneamente puoi usare un operatore:

from operator import itemgetter
for row in W:
    print itemgetter(*row)(b)

L'indicizzazione di una tupla estrae semplicemente l'ennesimo elemento, proprio come quando si indicizza un array. Cioè, la versione estesa

print b[(0,1,2)[0]], b[(0,1,2)[1]], b[(0,1,2)[2]]

è uguale a

print b[0], b[1], b[2]

IE, il 0 ° elemento della tupla (0, 1, 2) ( (0, 1, 2) [0] ) è 0.

Prova a scrivere i valori di tutte le variabili in ogni passaggio: il risultato che ottieni è giusto.

interazione 1:

  • la riga è (0,1,2)
  • b [riga [0]], b [riga [1]], b [riga [2]] è b [(0,1,2) [0], (0, 1,2) [1], (0,1,2) [2]], == b [0], b [1], b [2]

interazione 2:

  • riga è (3,4,5)
  • b [riga [0]], b [riga [1]], b [riga [2]] è b [3], b [4], b [5]

Una shell interattiva Python ti aiuterà a vedere cosa sta succedendo:

In [78]: W = ((0,1,2),(3,4,5),(0,4,8),(2,4,6))

In [79]: b = ['a','b','c','d','e','f','g','h','i']

In [81]: row=W[0]       # The first time throught the for-loop, row equals W[0]

In [82]: row
Out[82]: (0, 1, 2)

In [83]: row[0]
Out[83]: 0

In [84]: b[row[0]]
Out[84]: 'a'

In [85]: b[row[1]]
Out[85]: 'b'

In [86]: b[row[2]]
Out[86]: 'c'

per riga in W:

la prima tupla posizionata nella riga è (0,1,2)

in altre parole, W [0] == (0,1,2)

Therefore, since `row` == (0,1,2), then row[0] == 0

Quindi l'elemento [0] th di b == 'a'

b[0] == 'a'

e così via ...

b[1] == 'b'
b[2] == 'c'
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top