2009-10-23 8 views
4

J'apprends Python et suis tombé sur cet exemple:Comment fonctionne l'indexation d'une liste avec un tuple?

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

qui imprime:

abc

def

aei

CEG

Je suis en train de comprendre pourquoi!

Je reçois que par exemple la première fois à travers la version élargie:

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

Mais je ne comprends pas comment le (0,1,2) est en interaction. Quelqu'un peut-il offrir une explication? Merci.

(ce qui est une version abrégée d'un certain code pour un jeu de tic tac toe, et il fonctionne bien, je ne comprends pas cette partie)

Répondre

4

il itère sur un tuple de tuples, chaque row est un tuple à trois éléments, lors de l'impression, il accède à trois éléments de la liste b par index, ce que contient row tuple.

probablement, d'une manière un peu moins encombrées pour ce faire est:

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

Je l'ai trouvé à partir d'un autre post, mais j'aime votre message parce que votre suggestion est un peu plus claire. Merci. – Steve

4

Dans coup, le (0,1,2) ne fait rien. C'est un tuple et peut être indexé comme une liste, donc b[(0,1,2)[0]] devient b[0] depuis (0,1,2)[0] == 0.

Dans la première étape Python ne b[row[0]]b[(0,1,2)[0]]b[0]'a'

BTW, pour obtenir plusieurs éléments d'une séquence à la fois, vous pouvez utiliser un opérateur:

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

l'indexation d'un tuple juste extraits le nième élément, tout comme lors de l'indexation d'un tableau. Autrement dit, la version étendue

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

est égal à

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

IE, l'élément 0e du (0, 1, 2) tuple ((0, 1, 2)[0]) est 0.

+0

Cela a aidé. J'étais coincé sur la partie b [...] et manquais que la partie (0,1,2) [0] soit une opération en elle-même - c'est-à-dire indexer un tuple. Alors j'ai essayé juste cette partie, avec différentes variations, dans la coquille et vu ce qui était retourné, alors je l'ai eu! remercier. – Steve

0

for row in W:

premier tuple placé dans row est (0,1,2)

autrement dit, W[0] == (0,1,2)

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

Ainsi, le [0]th element of b == 'a'

b[0] == 'a' 

et ainsi de suite ...

b[1] == 'b' 
b[2] == 'c' 
+0

Ceci est déroutant: "' row [0] == (0,1,2) 'Par conséquent,' row [0] == 0' " – ndim

+0

Sûr était. Correction de l'erreur évidente. – gahooa

0

Essayez d'écrire les valeurs de toutes les variables de chaque étape: le résultat que vous obtenez est juste.

interaction 1:

  • ligne est (0,1,2)
  • b [row [0]], b [rangée [1]], [rangée [2]] b est b [(0,1,2) [0], (0,1,2) [1], (0,1,2) [2]], == b [0], b [1], b [2]

interaction 2:

  • ligne est (3,4,5)
  • b [row [0]], [rangée [1]] b, [rangée [2]] b est b [3], b [4], b [ 5]
  • shell interactif
0

Un Python vous aidera à voir ce qui se passe:

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'