使用元组索引列表是如何工作的?
我正在学习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)是怎么互动的。有没有人能解释一下?谢谢。
(这是一个井字棋游戏代码的简化版本,运行得很好,只是我不太明白这部分)
6 个回答
0
这段代码的意思是:对于列表W中的每一行,
第一组数据放入了row
中,这组数据是(0,1,2)
。
换句话说,W[0]
的值就是(0,1,2)
。
Therefore, since `row` == (0,1,2), then row[0] == 0
所以,b
这个列表的第[0]
个元素是'a'
。
b[0] == 'a'
接下来依此类推……
b[1] == 'b'
b[2] == 'c'
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)
4
它会遍历一个包含多个元组的元组,每个 row
是一个有三个元素的元组。在打印的时候,它通过索引访问 b
列表中的三个元素,这些元素就是 row
元组里包含的。
可能,有一种稍微简单点的方法可以做到这一点:
for f, s, t in W:
print b[f], b[s], b[t]