Встроенная функция sum(). Не работает для списка списков

Если интересно, то задача возникла из необходимости объединить коды цветов точек в один список. То есть у меня 3n точек, идущих последовательно n штук одного цвета. Естественно, я воспользовал автогенерацией (comprehensive list):

cc = [n * [color, ] for color in ['tab:blue', 'tab:orange', 'tab:green'] ]

Например при n == 2 получим:

cc

Out[24]: 
[['tab:blue', 'tab:blue'],
 ['tab:orange', 'tab:orange'],
 ['tab:green', 'tab:green']]

теперь очевидно

cc[0] + cc[1] + cc[2]
Out[25]: ['tab:blue', 'tab:blue', 'tab:orange', 'tab:orange', 'tab:green', 'tab:green']

однако желаемое применение встроенной функции sum() приводит к прерыванию.

sum(cc)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-26-175665ff078b> in <module>
----> 1 sum(cc)

TypeError: unsupported operand type(s) for +: 'int' and 'list'

Не понимаю - о каком "инте" здесь идет речь.
Протрите мне глаза пжста....

Выход я нашел:

import itertools
[el for el in itertools.chain(*cc)]
Out[33]: ['tab:blue', 'tab:blue', 'tab:orange', 'tab:orange', 'tab:green', 'tab:green']

Однако как говорит Хеттингер - "Должен быть лучший путь". Ведь sum() должна бы работать, не правда ли?


Ответы (1 шт):

Автор решения: CrazyElf

sum(iterable, start)

Return the sum of a 'start' value (default: 0) plus an iterable of numbers

У sum есть параметр - начальное значение, с которым складывать элементы. По умолчанию там 0, поэтому выходит такая ошибка. Но там можно прописать пустой список, и всё сработает:

sum(cc, [])
→ Ссылка