1. ホーム
  2. python

[解決済み] Pythonの円形リストイテレータ

2022-01-29 19:04:30

質問

円形のリストに対して、何度も繰り返し処理を行い、毎回最後に訪れた項目から始める必要があります。

ユースケースはコネクションプールである。クライアントが接続を要求すると、イテレータは指定された接続が利用可能かどうかをチェックしてそれを返し、そうでなければ利用可能な接続を見つけるまでループします。

Pythonできれいにやる方法はないでしょうか?

どのように解決するのですか?

使用方法 itertools.cycle というのが、その目的です。

from itertools import cycle

lst = ['a', 'b', 'c']

pool = cycle(lst)

for item in pool:
    print item,

出力します。

a b c a b c ...

(当然ながら永遠にループする)


イテレータを手動で進め、そこから値を一つずつ取り出すには、単に next(pool) :

>>> next(pool)
'a'
>>> next(pool)
'b'