4

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

打印:

美国广播公司

定义

艾伊

脑电图

我想弄清楚为什么!

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

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

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

(这是一个井字游戏的一些代码的缩写版本,它运行良好,我只是不明白这部分)

4

6 回答 6

4

在镜头中,(0,1,2)什么都不做。它是一个元组,可以像列表一样被索引,所以b[(0,1,2)[0]]变成了b[0]since (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)
于 2009-10-23T16:44:42.510 回答
4

它遍历一个元组的元组,每个元组row都是一个三元素元组,打印时它b通过索引访问列表的三个元素,这就是row元组包含的内容。

可能,一个稍微不那么混乱的方法是:

for f, s, t in W:
    print b[f], b[s], b[t]
于 2009-10-23T16:45:59.793 回答
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。

于 2009-10-23T16:45:46.610 回答
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'
于 2009-10-23T16:46:10.697 回答
0

试着写下每一步所有变量的值:你得到的结果是对的。

互动一:

  • 行是(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]
于 2009-10-23T16:47:56.343 回答
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'
于 2009-10-23T16:49:00.597 回答