4 ms·
You can join several lists into a flattened list as well: reduce(operator.add, list_of_lists) You can not say sum(), sadly, because it forces a restriction th
by koenigdavidmj 16y ago
You can join several lists into a flattened list as well:
reduce(operator.add, list_of_lists)
You can not say sum(), sadly, because it forces a restriction that you only sum numbers.
- dgouldin 16y agoIt's not pretty, but you can do it: >>> sum([['a', 'b', 'c'], ['d', 'e', 'f']], []) ['a', 'b', 'c', 'd', 'e', 'f'] This makes use of the optional start argument and list add operator. However, Python's docs suggest using itertools.chain instead: http://docs.python.org/library/functions.html#sum http://docs.python.org/library/functions.html#sum >>> import itertools >>> [l for l in itertools.chain(*[['a', 'b', 'c'], ['d', 'e', 'f']])] ['a', 'b', 'c', 'd', 'e', 'f'] (Of course you lose the benefit of a generator by using a list comprehension, but this is just an example.)
- jacobolus 16y agoYour second example is easier to just write as: >>> from itertools import chain >>> list_of_lists = [['a', 'b', 'c'], ['d', 'e', 'f']] >>> list(chain(*list_of_lists)) ['a', 'b', 'c', 'd', 'e', 'f'] That is, list(«foo») is clearer and more idiomatic than [x for x in «foo»].
- scottbessler 16y agoI may be missing something, but why isn't skipping your list comprehension maintaining the benefit of using a generator? >>> from itertools import chain >>> chain(*[['a', 'b', 'c'], ['d', 'e', 'f']])
- dgouldin 16y agoIt is, but I don't get to show you the result of the chain that way. :)