[Python-Dev] join() et al.

M.-A. Lemburg mal@lemburg.com
2000年5月16日 19:15:05 +0200


Fredrik Lundh wrote:
>> > Marc> join(seq,sep) := reduce(lambda x,y: x + sep + y, seq)
> >
> > Of course, while it will always yield what you ask for, it might not always
> > yield what you expect:
> >
> > >>> seq = [1,2,3]
> > >>> sep = 5
> > >>> reduce(lambda x,y: x + sep + y, seq)
> > 16
>> not to mention:
>> >>> print join([], " ")
> TypeError: reduce of empty sequence with no initial value

Ok, here's a more readable and semantically useful definition:
def join(sequence,sep=''):
 # Special case: empty sequence
 if len(sequence) == 0:
 try:
 return 0*sep
 except TypeError:
 return sep[0:0]
 
 # Normal case
 x = None
 for y in sequence:
 if x is None:
 x = y
 elif sep:
 x = x + sep + y
 else:
 x = x + y
 return x
Examples:
>>> join((1,2,3))
6
>>> join(((1,2),(3,4)),('x',))
(1, 2, 'x', 3, 4)
>>> join(('a','b','c'), ' ')
'a b c'
>>> join(())
''
>>> join((),())
()
-- 
Marc-Andre Lemburg
______________________________________________________________________
Business: http://www.lemburg.com/
Python Pages: http://www.lemburg.com/python/

AltStyle によって変換されたページ (->オリジナル) /