このコードのデバッグに何時間も費やしました。リストの最後から 2 番目の要素を取得したい。
for x, y in itertools.groupby(range(0,10), lambda x: int(x / 3)):
print("the group's key is %d and values are %s" % (x, ','.join(map(str,y))))
temp = itertools.groupby(range(0,10), lambda x: int(x / 3))
the_last_one = None
second_to_last = None
for x,y in temp:
second_to_last = the_last_one
the_last_one = y
print(next(iter(second_to_last)))
デモンストレーション用の最初の部分の出力は次のとおりです。
the group's key is 0 and values are 0,1,2
the group's key is 1 and values are 3,4,5
the group's key is 2 and values are 6,7,8
the group's key is 3 and values are 9
2 番目の部分の目標は、最後から 2 番目のグループの最初の要素を出力することです。期待して6
いますが、代わりに例外が発生しますStopIteration
。最後の行を次のように変更すると:
print(next(the_last_one))
次に、期待される結果が得られ9
ます。groupby
作品の出力と同じ構造を持つタプルのリストを使用することもできます。このコードは反復子でのみ失敗します。