首頁 >後端開發 >Python教學 >如何擴展 Python 的 zip() 函數來處理不等長度的可迭代物件?

如何擴展 Python 的 zip() 函數來處理不等長度的可迭代物件?

Linda Hamilton
Linda Hamilton原創
2024-11-27 17:56:13401瀏覽

How Can I Extend Python's zip() Function to Handle Iterables of Unequal Lengths?

擴充zip() 功能:填滿最長長度

Python 的內建zip() 函數對來自多個可迭代物件的物件元素進行配對,但它將結果截斷為最短可迭代的長度。如果您需要使用None 值填充的更全面的zip 以與最長的輸入對齊,請考慮以下解決方案:

Python 3:itertools.zip_longest

在Python 中3、itertools提供了zip_longest()函數。它擴展結果列表以匹配最長輸入的長度。

import itertools
a = ['a1']
b = ['b1', 'b2', 'b3']
c = ['c1', 'c2']

list(itertools.zip_longest(a, b, c))
# [('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)]

您可以使用fillvalue 參數指定自訂填充值:

list(itertools.zip_longest(a, b, c, fillvalue='foo'))
# [('a1', 'b1', 'c1'), ('foo', 'b2', 'c2'), ('foo', 'b3', 'foo')]

Python 2: itertools.izip_longest 或map NonePython 2: itertools.izip_longest 或map None

from itertools import izip_longest
a = ['a1']
b = ['b1', 'b2', 'b3']
c = ['c1', 'c2']

list(izip_longest(a, b, c))
# [('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)]

map(None, a, b, c)
# [('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)]
在Python 2 中,您可以使用itertools.izip_longest (Python 2.6 中引入)或使用帶有 None 的 map。

以上是如何擴展 Python 的 zip() 函數來處理不等長度的可迭代物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn