1. 程式人生 > >內建函式enumerate和zip

內建函式enumerate和zip

enumerate(sequence, start=0)

返回一個列舉物件。 sequence必須是序列, 迭代器或其他支援迭代的物件。 next()返回的迭代器的 方法enumerate()返回一個包含計數的元組(從start開始,預設為0)和迭代序列獲得的值: 比如:

seasons = ['Spring', 'Summer', 'Fall', 'Winter']
list(enumerate(seasons))

輸出結果:[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
list(enumerate(seasons, start=1))

輸出結果:[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

相當於:

def enumerate(sequence, start=0):
    n = start
    for elem in sequence:
        yield n, elem
        n += 1

zip([ iterable,… ] )

此函式返回元組列表。 其中第i個元組包含 來自每個引數序列或迭代的第i個元素。 返回的列表的長度被截斷為最短引數序列的長度。 當有多個引數長度相同時,與初始引數zip() 類似。 使用單個序列引數,它返回一個1元組的列表。 沒有引數,它返回一個空列表。

保證了迭代的從左到右的評估順序。這使得使用資料系列成為n長度組的習慣成為可能zip(*[iter(s)]*n)。

zip()與*運算子一起使用可以解壓縮列表:

    x = [1, 2, 3]
    y = [4, 5, 6]
    zipped = zip(x, y)
    print zipped          # 輸出結果:[(1, 4), (2, 5), (3, 6)]
    print zip(*zipped)    # 輸出結果:[(1, 2, 3), (4, 5, 6)]
    x2, y2 = zip(*zipped)
    print x == list(x2) and y == list(y2)

    輸出結果: True