1 つの可能性は itertools.dropwhile を使用することです (ただし、明確ではないため、これは目的のソリューションの範囲として制限される場合があります。また、 itertools.dropwhile は itertools.cycle のようにリストを無限に循環しません)。
データモデルの詳細をあまり提供していません。group.individuals は個人オブジェクトのリストを返し、「.id」プロパティは各個人の ID 番号を表すと仮定します。たとえば、group.individuals のリスト内で個人 ID 7 を探しているとします。
from itertools import dropwhile
for item in dropwhile(lambda x: x.id != 7, group.individuals):
print item
これは、id=7 が見つかるまで (または、より正確には、最初の False テストまで itertools.dropwhile が何も返さないため、x.id != 7 まで)、リストを調べてから、オブジェクトから個々のオブジェクトを返し始めます。リスト。したがって、そのリストの ID が [1, 19, 5, 6, 7, 2, 4, 5] の場合、7 2 4 5 が返されます。
あなたの目的のために、最初に返された応答を無視し、その後の応答を使用するように思えます。
もう 1 つの方法は、group.individuals の元のリストを繰り返し処理して、必要な ID のインデックスを見つけ、インデックスをインクリメントすることです。これにより、計算されたインデックスがリストを超えた場合に、インデックスを 0 から開始することもできます。例:
def nextrecord(recordlist, value):
for i in range(len(recordlist)):
if recordlist[i].id == value:
newindex = i + 1
break
if newindex >= len(recordlist):
newindex = 0
return recordlist[newindex]
print nextrecord(group.individuals, 7)
しかしもちろん、これはより離散的であり、反復可能ではありません。これにアプローチする方法はおそらく他にもたくさんあります (関数を反復可能にすることを含む) が、私はまだカフェインを飲んでいません!