On Mon, May 9, 2011 at 1:26 PM, Martineau <ggrp2.20.martin...@dfgh.net> wrote: > Instead of join() here's a function that does something similar to > what the string join() method does. The first argument can be a list > of any type of objects and the second separator argument can likewise > be any type. The result is list of the various objects. (The example > usage just uses a list of string objects and separator to illustrate > what it does.) > > def tween(seq, sep): > return reduce(lambda r,v: r+[sep,v], seq[1:], seq[:1]) > > lst = ['a','b','c','d','e'] > > print tween(lst, '|') > print ''.join(tween(lst, '|')) > > Output: > > ['a', '|', 'b', '|', 'c', '|', 'd', '|', 'e'] > a|b|c|d|e > > > It could be made a little more memory efficient by applying the > itertools module's islice() generator to the first 'seq' argument > passed to reduce(): > > def tween(seq, sep): > return reduce(lambda r,v: r+[sep,v], itertools.islice(seq,1,None), > seq[:1])
This version accepts any iterable, not just a list: def tween(seq, sep): it = iter(seq) try: first = it.next() except StopIteration: return [] return reduce(lambda r, v: r + [sep, v], it, [first]) A further efficiency improvement would be to do the list concatenation in place to avoid generating O(n) intermediate copies: def tween(seq, sep): it = iter(seq) try: first = it.next() except StopIteration: return [] def add_sep(r, v): r += [sep, v] return r return reduce(add_sep, it, [first]) -- http://mail.python.org/mailman/listinfo/python-list