"David Murmann" <[EMAIL PROTECTED]> wrote in message 
news:[EMAIL PROTECTED]
>> def join(sep, seq):
>>     return reduce(lambda x, y: x + sep + y, seq, type(sep)())
>
> damn, i wanted too much. Proper implementation:
>
> def join(sep, seq):
>     if len(seq):
>         return reduce(lambda x, y: x + sep + y, seq)
>     return type(sep)()
>
> but still short enough

For general use, this is both too general and not general enough.

If len(seq) exists then seq is probably reiterable, in which case it may be 
possible to determine the output length and preallocate to make the process 
O(n) instead of O(n**2).  I believe str.join does this.  A user written 
join for lists could also.  A tuple function could make a list first and 
then tuple(it) at the end.

If seq is a general (non-empty) iterable, len(seq) may raise an exception 
even though the reduce would work fine.

Terry J. Reedy



-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to