如何使用元组索引列表?

时间:2009-10-23 16:40:59

标签: python list indexing tuples

我正在学习Python并遇到了这个例子:

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

打印:

a b c

d e f

a e i

c e g

我想找出原因!

例如,第一次通过扩展版本时,我得到了:

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

但我不明白(0,1,2)是如何互动的。任何人都可以提供解释吗?感谢。

(这是一个tic tac toe游戏的一些代码的缩写版本,它运作良好,我只是没有得到这部分)

6 个答案:

答案 0 :(得分:4)

在镜头中,(0,1,2)什么也没做。它是一个元组,可以像列表一样编入索引,因此b[(0,1,2)[0]]b[0]变为(0,1,2)[0] == 0

在第一步中,Python执行b[row[0]]b[(0,1,2)[0]]b[0]'a'

顺便说一下,要立即从序列中获取多个项目,您可以使用运算符:

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

答案 1 :(得分:4)

迭代元组元组,每个row是一个三元素元组,打印时它按索引访问b列表的三个元素,这就是row元组包含。

可能,这样做的方法稍微简洁:

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

答案 2 :(得分:0)

索引元组只是提取第n个元素,就像索引数组一样。也就是说,扩展版

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

等于

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

IE,(0,1,2)元组((0, 1, 2)[0])的第0个元素为0。

答案 3 :(得分:0)

for row in W:

放入row的第一个元组是(0,1,2)

换句话说,W[0] == (0,1,2)

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

所以[0]th element of b == 'a'

b[0] == 'a'

依旧......

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

答案 4 :(得分:0)

尝试记下每个步骤中所有变量的值:得到的结果是正确的。

互动1:

  • 行是(0,1,2)
  • b [row [0]],b [row [1]],b [row [2]] 是b [(0,1,2)[0],(0, 1,2)[1],(0,1,2)[2]],== b [0],b [1],b [2]

互动2:

  • 是(3,4,5)
  • b [row [0]],b [row [1]],b [row [2]] 是b [3],b [4],b [5]

答案 5 :(得分:0)

Python交互式shell将帮助您了解正在发生的事情:

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'