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' и 'список'
Это соответствующий раздел помощи для sum
:
сумма (последовательность [, начало]) -> значение
Возвращает сумму последовательности номеров (НЕ строки) плюс значение параметра 'start' (по умолчанию - 0).
Примечание
Как wallacoloo comented это не общее решение для выпрямления любого многомерные списка. Он просто работает для списка 1D-списков из-за поведения, описанного выше.
Update
На пути к сплющить 1 уровень вложенности см этот рецепт от itertools страницы:
def flatten(listOfLists):
"Flatten one level of nesting"
return chain.from_iterable(listOfLists)
сглаживаться более глубоко вложенной списки (в том числе неправильно вложенных списков) см accepted answer до this question (есть и другие вопросы, связанные с этим вопросом.)
Обратите внимание, что в рецепте возвращается номер itertools.chain
(итерабельный), а ответ другого вопроса возвращает объект generator
, поэтому вам нужно обернуть любой из них при вызове list
, если вам нужен полный список, а не итерация по нему. например list(flatten(my_list_of_lists))
.
Это не превратит * любой * многомерный список в 1D. '[[[1,2]], [[3,4]]]' становится '[[1, 2], [3, 4]]'. – Ponkadoodle
Также обратите внимание, что небезопасно преобразовывать только последовательность _any_ в 1D, так как тривиально создавать последовательности с поистине бесконечным числом измерений: 'a = []; a.append (а) '. – badp
Связанный «Сглаживание мелкого списка в python» http://stackoverflow.com/questions/406121/flattening-a-shallow-list-in-python – jfs