sum
добавляет последовательность вместе, используя оператор +
. например, sum([1,2,3]) == 6
. Второй параметр является необязательным начальным значением, которое по умолчанию равно 0. Например, sum([1,2,3], 10) == 16
.
В вашем примере это [] + [1,2] + [3,4]
, где +
в 2 списках объединяет их вместе. Поэтому результат [1,2,3,4]
Пустой список необходим как 2-й параметр для sum
, потому что, как упоминалось выше, по умолчанию sum
добавляется к 0 (т. Е. 0 + [1,2] + [3,4]
), что приводит к неподдерживаемому типу операнда ( s) для +: 'int' и 'list'
Это соответствующий раздел справки для sum
:
сумма (последовательность [, начало]) -> значение
Возвращает сумму последовательности
числа (НЕ строки) плюс значение
параметра 'start' (который по умолчанию
до 0).
Примечание
Как прокомментировал wallacoloo , это не общее решение для выравнивания любого многомерного списка. Это просто работает для списка 1D списков из-за поведения, описанного выше.
Обновление
Чтобы выровнять 1 уровень вложенности, см. Этот рецепт со страницы itertools :
def flatten(listOfLists):
"Flatten one level of nesting"
return chain.from_iterable(listOfLists)
Чтобы сгладить более глубоко вложенные списки (включая нерегулярно вложенные списки), см. принятый ответ на этот вопрос (с этим вопросом связаны и другие вопросы).
Обратите внимание, что рецепт возвращает объект itertools.chain
(который является итеративным), а ответ на другой вопрос возвращает объект generator
, поэтому вам нужно обернуть любой из них в вызове list
, если вы хотите полный список вместо того, чтобы перебирать его. например list(flatten(my_list_of_lists))
.