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)编写,
,而不需要对
。现在对我来说有意义了!谢谢你的帮助。