Join List with Separator I was implementing something similar to Python's join function, where 

join([a1, a2, ..., aN], separator :: String)


returns

str(a1) + separator + str(a2) + separator + ... + str(aN)


e.g.,

join([1, 2, 3], '+') == '1+2+3'




I was implementing something similar and was wondering, what is a good pattern to do this? Because there is the issue of only adding the separator if it is not the last element

def join(l, sep):
    out_str = ''
    for i, el in enumerate(l):
        out_str += '{}{}'.format(el, sep)
    return out_str[:-len(sep)]


I'm quite happy with this, but is there a canoncial approach?
Strings in Python are immutable, and so 'string a' + 'string b' has to make a third string to combine them. Say you want to clone a string, by adding each item to the string will get \$O(n^2)\$ time, as opposed to \$O(n)\$ as you would get if it were a list.

And so, the best way to join an iterable by a separator is to use str.join.

&gt;&gt;&gt; ','.join('abcdef')
'a,b,c,d,e,f'




If you want to do this manually, then I'd accept the \$O(n^2)\$ performance, and write something easy to understand. One way to do this is to take the first item, and add a separator and an item every time after, such as:

def join(iterator, seperator):
    it = map(str, iterator)
    seperator = str(seperator)
    string = next(it, '')
    for s in it:
        string += seperator + s
    return string