使用元组索引列表是如何工作的?

4 投票
6 回答
860 浏览
提问于 2025-04-15 15:19

我正在学习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]

撰写回答