Pregunta

Estoy aprendiendo Python y encontré este ejemplo:

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]]

que imprime:

a b c

d e f

a e i

c e g

¡Estoy tratando de averiguar por qué!

Lo obtengo, por ejemplo, la primera vez que la versión expandida es:

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

Pero no entiendo cómo interactúa (0,1,2). ¿Alguien puede ofrecer una explicación? Gracias.

(esta es una versión abreviada de algún código para un juego de tic tac toe, y funciona bien, simplemente no entiendo esta parte)

¿Fue útil?

Solución

itera sobre una tupla de tuplas, cada row es una tupla de tres elementos, al imprimirla accede a tres elementos de la lista b por índice, que es lo que row tuple contiene.

Probablemente, una forma un poco menos abarrotada de hacer esto es:

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

Otros consejos

En el disparo, el (0,1,2) no hace nada. Es una tupla y se puede indexar como una lista, por lo que b [(0,1,2) [0]] se convierte en b [0] desde ( 0,1,2) [0] == 0 .

En el primer paso, Python hace b [fila [0]] ? b [(0,1,2) [0]] ? b [ 0] ? 'a'

Por cierto, para obtener varios elementos de una secuencia a la vez, puede usar un operador:

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

La indexación de una tupla simplemente extrae el elemento nth, al igual que cuando se indexa una matriz. Es decir, la versión expandida

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

es igual a

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

IE, el elemento 0 de la tupla (0, 1, 2) ( (0, 1, 2) [0] ) es 0.

Intente anotar los valores de todas las variables en cada paso: el resultado que obtenga es correcto.

interacción 1:

  • la fila es (0,1,2)
  • b [fila [0]], b [fila [1]], b [fila [2]] es b [(0,1,2) [0], (0, 1,2) [1], (0,1,2) [2]], == b [0], b [1], b [2]

interacción 2:

  • fila es (3,4,5)
  • b [fila [0]], b [fila [1]], b [fila [2]] es b [3], b [4], b [5]

Un shell interactivo de Python te ayudará a ver lo que está pasando:

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'

para la fila en W:

la primera tupla colocada en la fila es (0,1,2 )

en otras palabras, W [0] == (0,1,2)

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

Por lo tanto, el [0] th elemento de b == 'a'

b[0] == 'a'

y así sucesivamente ...

b[1] == 'b'
b[2] == 'c'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top