我敢打賭,你可能遇到過在 Python 中嘗試壓縮兩個不同長度的列表時丟失資料的挫敗感。
itertools.zip_longest 來拯救世界。這裡我想探索如何使用 zip_longest(),將其與標準 zip 進行比較,並深入研究它的閃光點的實際場景。
Python 中 itertools 模組中的 zip_longest() 函數允許您壓縮多個可迭代對象,並用指定值(預設)填充較短的可迭代對象。這可以確保即使迭代的長度不同,也不會遺失資料。
考慮這樣一個場景:您嘗試在教室中為學生安排座位,但學生人數和可用課桌數量不匹配。您要確保每個學生都有座位,並且每個座位都盡可能坐滿。
如果您使用zip(),一旦用完學生或課桌,配對就會停止。這意味著一些課桌可能是空的,或者一些學生可能會站著。
使用zip_longest(),您可以為每個學生配備一張桌子,如果您的桌子用完,您可以注意到額外的學生需要站立。或者,如果課桌數量多於學生,您可以將多餘的課桌標記為「空」。每個學生都被記錄下來,並且您確切地知道哪些課桌未被佔用。
考慮一個課桌數量超過學生數量的範例,同時使用 zip() 和 zip_longest()。
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 仍未分配,並且沒有跡象表明它未被使用。
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中文網其他相關文章!