這對我來說並不是一項微不足道的任務,我也找不到任何收據,所以也許你可以指給我一個,或者你有一個準備好,適當和好的爲此調整的解決方案?正確的意義對於不知道自己長度的迭代器(沒有__len__
)也適用,並且可用於可耗盡的迭代器(例如鏈式迭代器);良好的調整意義很快。python itizip循環遍歷所有iterables,直到最長完成
注意:由於必須緩存迭代器輸出以重新迭代它們(Glenn Maynard指出),因此解決方案不可行。
用法示例:
>>> list(izip_cycle(range(2), range(5), range(3)))
[(0, 0, 0), (1, 1, 1), (0, 2, 2), (1, 3, 0), (0, 4, 1)]
>>> from itertools import islice, cycle, chain
>>> list(islice(izip_cycle(cycle(range(1)), chain(range(1), range(2))), 6))
[(0, 0), (0, 0), (0, 1), (0, 0), (0, 0), (0, 1)]
不錯,但有一個錯誤:在重新循環迭代器之前,你可能需要額外的'if self.remains'檢查(否則你會在有限的情況下去掉一個元素)。 – trybik 2010-11-09 00:01:22
@trybik是啊,我正在編輯時,你寫了:) – 2010-11-09 00:02:59
只是美學:我實際上想'如果self.remains'減少'_gen'中的計數器。這樣,你甚至可以跳過'__iter__'中的這個檢查,並且有'while True:yield next(self.items)'('izip'將會停止)。幾乎沒有快速檢查更多的交易沒有產生不必要的元組+ 3行代碼更少+甚至更好的可讀性:)但是,我非常喜歡這個 - 確切地說它應該是什麼,並且非常可讀。 – trybik 2010-11-09 00:23:44