[Python-ideas] Add list.join() please

Steven D'Aprano steve at pearwood.info
Tue Jan 29 16:44:39 EST 2019


On Tue, Jan 29, 2019 at 09:21:48PM +0000, Jonathan Fine wrote:

> I've not been following closely, so please forgive me if I'm repeating
> something already said in this thread.
> 
> Summary: str.join allows us to easily avoid, when assembling strings,
> 1. Quadratic running time.
> 2. Redundant trailing comma syntax error.

The lack of a syntax error for trailing commas is a language-wide 
feature that has nothing to do with str.join.


> The inbuilt help(str.join) gives:
>     S.join(iterable) -> str
>         Return a string which is the concatenation of the strings in the
>         iterable.  The separator between elements is S.
> 
> This is different from sum in two ways.

Three ways. sum() intentionally doesn't support strings at all:

    py> sum(['a', 'b', 'c'], '')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: sum() can't sum strings [use ''.join(seq) instead]

unless you cleverly defeat this intentional limitation. (How to do this 
is left as an exercise for the reader.)


> The first is the separator S.
> The second is performance related. Consider
>     s = 0
>     for i in range(100):
>         s += 1
> and
>     s = ''
>     for i in range(100):
>         s += 'a'
> 
> The first has linear running time (in the parameter represented by
> 100). The second has quadratic running time (unless string addition is
> doing something clever, like being lazy in evaluation).

In CPython, string addition does often do something clever. But not by 
being lazy -- it optimizes the string concatenation by appending to the 
strings in place if and only if it is safe to do so.


-- 
Steve


More information about the Python-ideas mailing list