Python中的列表枚举

Python中的列表枚举,python,list,enumerate,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): re

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

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循环中使用的枚举。从文档中可以看出,
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]和M=[1,1,2]
等等。有人能解释一下发生了什么吗?

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

当然
L
M
是列表。如果你跑

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)
你会得到想要的结果。因此,您要查找的元组保存在
对中。排队

# ...
(L, M) = pair
# ...
您将
pair
引用的元组拆分为其元素,在第一次迭代中,这些元素是
A
B
引用的两个列表

上面这一行基本上是指

(L, M) = (A, B)
这相当于

L, M = A, B

这又意味着“将
A
分配给
L
并将B分配给
M

阅读
解包
枚举()
中的元组已解包为
i
。您可以嵌套解包,这样您就可以在枚举(对)中为i,(L,M)编写
,而不需要
。现在对我来说有意义了!谢谢你的帮助。