內建函式enumerate和zip
阿新 • • 發佈:2018-12-19
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