[英]List Enumeration in Python
下面的代碼片段來自代碼跟蹤練習。
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]
,依此類推。 有人可以解釋發生了什么嗎?
用for i,pair in enumerate(pairs):
的那一行在for i,pair in enumerate(pairs):
, i
獲取列表pairs
的索引值,並從0到9,而pair
從列表pairs
獲取值。 因此,對於i = 0
,該pair
為([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)
您將獲得理想的結果。 所以,你正在尋找的元組保存在pairs
。 用線
# ...
(L, M) = pair
# ...
你分裂通過引用的元組pair
進入它的元素,它們是-在第一次迭代-通過引用的兩個列表A
和B
。
上面的線本質上意味着
(L, M) = (A, B)
相當於
L, M = A, B
依次表示“將A
分配給L
,將B分配給M
”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.