【发布时间】:2017-10-28 01:42:57
【问题描述】:
下面的 sn-p 来自代码跟踪练习。
import copy
def ct1(A, B, C, D, E):
result = [ ]
# 0 1 2 3 4 5 6 7 8 9
pairs = [(A,B),(A,C),(A,D),(A,E),(B,C),(B,D),(B,E),(C,D),(C,E),(D,E)]
for i,pair in enumerate(pairs):
(L, M) = pair
if (L is M): result.append(i)
elif (L == M): result.append(10*i)
return result
def f(L):
L[0] += 1
return L
A = list(range(3))
B = copy.copy(A)
C, D, E = A, B+[ ], f(B)
print(ct1(A, B, C, D, E))
我感到困惑的部分是 for 循环中使用的枚举。从enumerate() 的文档看来,pair 应该具有如下值:
(0, ([0, 1, 2], [1, 1, 2]))
(1, ([0, 1, 2], [0, 1, 2]))
(2, ([0, 1, 2], [0, 1, 2]))
(3, ([0, 1, 2], [1, 1, 2]))
(4, ([1, 1, 2], [0, 1, 2]))
(5, ([1, 1, 2], [0, 1, 2]))
(6, ([1, 1, 2], [1, 1, 2]))
(7, ([0, 1, 2], [0, 1, 2]))
在迭代期间,这意味着'L' 的值应该从0 到7 和'M',元组([0, 1, 2], [1, 1, 2]) 到([0, 1, 2], [0, 1, 2])。但是,当我通过调试器运行此代码时,我看到 L 和 M 都是列表。例如,当i = 0, L = [0, 1, 2] and M = [1, 1, 2] 等等。有人可以解释一下发生了什么吗?
【问题讨论】:
-
继续阅读
unpacking,来自enumerate()的元组已被解压缩为i和pair。你可以嵌套解包,所以你可以写for i, (L, M) in enumerate(pairs):而不需要pair。 -
现在对我有意义!感谢您的帮助。