首頁  >  文章  >  後端開發  >  除了拉上外套拉鍊之外:掌握 Python 中的“zip_longest”

除了拉上外套拉鍊之外:掌握 Python 中的“zip_longest”

PHPz
PHPz原創
2024-08-10 07:09:081156瀏覽

Beyond Zipping Up a Coat: Mastering

我敢打賭,你可能遇到過在 Python 中嘗試壓縮兩個不同長度的列表時丟失資料的挫敗感。
itertools.zip_longest 來拯救世界。這裡我想探索如何使用 zip_longest(),將其與標準 zip 進行比較,並深入研究它的閃光點的實際場景。

itertools.zip_longest 是什麼?

Python 中 itertools 模組中的 zip_longest() 函數允許您壓縮多個可迭代對象,並用指定值(預設)填充較短的可迭代對象。這可以確保即使迭代的長度不同,也不會遺失資料。

實際範例

考慮這樣一個場景:您嘗試在教室中為學生安排座位,但學生人數和可用課桌數量不匹配。您要確保每個學生都有座位,並且每個座位都盡可能坐滿。

  • 如果您使用zip(),一旦用完學生或課桌,配對就會停止。這意味著一些課桌可能是空的,或者一些學生可能會站著。

  • 使用zip_longest(),您可以為每個學生配備一張桌子,如果您的桌子用完,您可以注意到額外的學生需要站立。或者,如果課桌數量多於學生,您可以將多餘的課桌標記為「空」。每個學生都被記錄下來,並且您確切地知道哪些課桌未被佔用。

考慮一個課桌數量超過學生數量的範例,同時使用 zip()zip_longest()

使用 zip()

students = ['Alice', 'Bob']
desks = ['Desk 1', 'Desk 2', 'Desk 3']

# Using zip to pair students with desks
seating_zip = list(zip(students, desks))

print("Seating with zip:")
for student, desk in seating_zip:
    print(f"{student} is assigned to {desk}")

輸出:

Seating with zip:
Alice is assigned to Desk 1
Bob is assigned to Desk 2

使用zip(),一旦較短的清單(學生)用完,配對就會停止。辦公桌 3 仍未分配,並且沒有跡象表明它未被使用。

使用 zip_longest()

from itertools import zip_longest

students = ['Alice', 'Bob']
desks = ['Desk 1', 'Desk 2', 'Desk 3']

# Using zip_longest to pair students with desks
seating_zip_longest = list(zip_longest(students, desks, fillvalue='Empty Seat'))

print("\nSeating with zip_longest:")
for student, desk in seating_zip_longest:
    print(f"{student} is assigned to {desk}")

輸出:

Seating with zip_longest:
Alice is assigned to Desk 1
Bob is assigned to Desk 2
Empty Seat is assigned to Desk 3

使用zip_longest(),即使沒有足夠的學生來填滿所有座位,每張課桌都會被計算在內。在這種情況下,辦公桌 3 與「空位」配對,表示該辦公桌仍無人佔用。當您需要追蹤所有資源並確保不遺漏任何內容時,此方法特別有用。

zip_longest() 的優點:
保留資料:確保填充較短的迭代不會遺失資料。
彈性:允許指定自訂填充值。
全面配對:在需要對齊不同長度迭代的資料處理任務中很有用。
zip_longest() 的缺點:
填充可能是不需要的:在某些情況下,填充可能會帶來不必要的複雜性。
記憶體使用:如果處理大型迭代和大填充值,可能會使用更多記憶體。

zip() 的優點:
簡單高效:適用於等長度的可迭代。
更少的記憶體使用:無填充意味著潛在的更少的記憶體開銷。
zip() 的缺點:
資料遺失: 截斷為最短的迭代,遺失較長迭代的資料。

結論

zip_longest() 是 Python 武器庫中的一個強大工具,特別是在處理不同長度的可迭代時。它透過填充缺失值來確保資料完整性,使其成為各種資料處理任務的理想選擇。雖然 zip() 更簡單、更節省內存,但 zip_longest() 提供了許多實際場景所需的靈活性。

以上是除了拉上外套拉鍊之外:掌握 Python 中的“zip_longest”的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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