0
def list_step(max = 268):    
    """ split in steps of 120 elements at time
    """
    if max > 120:
        for i in xrange(0,max,120):
            if i <= max:
                rest =  max % xrange(0,max,120)[-1]
                if rest != 120:
                    yield(i, rest)
                else:
                    yield(i, 0)
    else:
        yield(max)


a = list_step()
a.next()      return > (0,28) (120,28),ecc

残りのタプルの代わりに、最後の next() の実行時に残りを返すことは可能でしょうか?

となることによって :

    a.next()      return > (0) (120),ecc.. (28)
4

2 に答える 2

1

を使用itertools.chainしてイテレータを連鎖させることができます (ドキュメント)。単一の値を単にジェネレーターに「追加」したい場合は、それを使用できます (何らかの方法で単一のアイテムをイテラブルに変換する必要があることに注意してください)。

また、max % xrange(0, max, 120)[-1]は常に になります。最大値は 120 の倍数であり、最大値よりも小さいため、それで割ると 120 で割ると同じ結果が得られます (モジュロ) max % 120xrange(0, max, 120)

import itertools

itertools.chain(xrange(0,max,120), [max % 120])
于 2015-03-20T10:32:07.730 に答える