列出Python中的枚举

时间:2017-05-27 06:41:26

标签: python list enumerate

下面的代码段来自代码跟踪练习。

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'应具有从07'M',元组([0, 1, 2], [1, 1, 2])([0, 1, 2], [0, 1, 2])的值。但是,当我通过调试器运行此代码时,我发现LM都是列表。例如,i = 0, L = [0, 1, 2] and M = [1, 1, 2]时等等。有人可以解释一下发生了什么吗?

2 个答案:

答案 0 :(得分:0)

使用行for i,pair in enumerate(pairs):i获取列表pairs中的索引值,并从0到9,而pair从列表{{1}获取值一个接一个。因此,对于pairsi = 0pair。然后,您调用([0, 1, 2], [1, 1, 2]),这意味着(L, M) = pair获取第一个列表,而L获取元组中的第二个列表。希望这会有所帮助。

答案 1 :(得分:0)

当然LM是列表。如果你运行

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):
    print(i, pair)

您将获得所需的结果。所以你要找的元组保存在pairs中。用线

# ...
(L, M) = pair
# ...

pair引用的元组拆分为其元素,这些元素在第一次迭代中由AB引用的两个列表。

上述内容基本上意味着

(L, M) = (A, B)

相当于

L, M = A, B

反过来意味着“将A分配给L并将B分配给M”。