I was browsing the Voidspace blog item on "Flattening Lists", and followed up on the use of sum to do the flattening. A solution was:
>>> nestedList = [[1, 2], [3, 4], [5, 6]] >>> sum(nestedList,[]) [1, 2, 3, 4, 5, 6] I would not have thought of using sum in this way. When I did help(sum) the docstring was very number-centric: It went further, and precluded its use on strings: >>> help(sum) Help on built-in function sum in module __builtin__: sum(...) sum(sequence, start=0) -> value Returns the sum of a sequence of numbers (NOT strings) plus the value of parameter 'start'. When the sequence is empty, returns start. The string preclusion would not help with duck-typing (in general), so I decided to consult the ref doc on sum: sum( sequence[, start]) Sums start and the items of a sequence, from left to right, and returns the total. start defaults to 0. The sequence's items are normally numbers, and are not allowed to be strings. The fast, correct way to concatenate sequence of strings is by calling ''.join(sequence). Note that sum(range(n), m) is equivalent to reduce(operator.add, range(n), m) New in version 2.3. The above was a lot better description of sum for me, and with an inquisitive mind, I like to think that I might have come up with using sum to flatten nestedList :-) But there was still that warning about using strings. I therefore tried sum versus their reduce "equivalent" for strings: >>> import operator >>> reduce(operator.add, "ABCD".split(), '') 'ABCD' >>> sum("ABCD".split(), '') Traceback (most recent call last): File "<interactive input>", line 1, in ? TypeError: sum() can't sum strings [use ''.join(seq) instead] >>> Well, after all the above, there is a question: Why not make sum work for strings too? It would remove what seems like an arbitrary restriction and aid duck-typing. If the answer is that the sum optimisations don't work for the string datatype, then wouldn't it be better to put a trap in the sum code diverting strings to the reduce equivalent? Just a thought, - Paddy. -- http://mail.python.org/mailman/listinfo/python-list