unexpected wrote: > If have a list from 1 to 100, what's the easiest, most elegant way to > print them out, so that there are only n elements per line.
I've run into this problem a few times, and although many solutions have been presented specifically for printing I would like to present a more general alternative. from itertools import chain def istepline(step, iterator): i = 0 while i < step: yield iterator.next() i += 1 def istep(iterable, step): iterator = iter(iterable) # Make sure we won't restart iteration while True: # We rely on istepline()'s side-effect of progressing the # iterator. start = iterator.next() rest = istepline(step - 1, iterator) yield chain((start,), rest) for i in rest: pass # Exhaust rest to make sure the iterator has # progressed properly. >>> i = istep(range(12), 5) >>> for x in i: print list(x) ... [0, 1, 2, 3, 4] [5, 6, 7, 8, 9] [10, 11] >>> i = istep(range(12), 5) >>> for x in i: print x ... <itertools.chain object at 0xa7d3268c> <itertools.chain object at 0xa7d3260c> <itertools.chain object at 0xa7d3266c> >>> from itertools import islice, chain, repeat >>> def pad(iterable, n, pad): return islice(chain(iterable, repeat(pad)), n) >>> i = istep(range(12), 5) >>> for x in i: print list(pad(x, 5, None)) ... [0, 1, 2, 3, 4] [5, 6, 7, 8, 9] [10, 11, None, None, None] Would anybody else find this useful? Maybe worth adding it to itertool? -- http://mail.python.org/mailman/listinfo/python-list