簡體   English   中英

Python中的列表枚舉

[英]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'值應介於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] ,依此類推。 有人可以解釋發生了什么嗎?

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獲得第二個列表。 希望這可以幫助。

當然, 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 ”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM