[python] ループの最後を判定する小技

ループの最後の一回だけ別の処理がしたい!
なんていうよくある願いを簡単に叶えてくれる、ループの最後の一回を判定する小技のご紹介

最後の一回を取得する

def lastone(iterable):
    """与えられたイテレータブルオブジェクトの
    最後の一つの要素の時にTrue、それ以外の時にFalseを返す
    """
    # イテレータを取得して最初の値を取得する
    it = iter(iterable)
    last = next(it)
    # 2番目の値から開始して反復子を使い果たすまで実行
    for val in it:
        # 一つ前の値を返す
        yield last, False
        last = val # 値の更新
    # 最後の一つ
    yield last, True

利用例


for i, is_last in lastone(range(5)):
    print(i, is_last)

# 0, False
# 1, False
# 2, False
# 3, False
# 4, True