Что больше pythonic?
list.append(1)
или
list += [1]
Что больше pythonic?
list.append(1)
или
list += [1]
list.append(1)
выполняется быстрее, поскольку он не создает объект временного списка.
Из Zen of Python:
Явный лучше, чем неявный.
Итак: list.append(1)
Это две разные операции, то, что вы делаете с + =, - это операция расширения. Вот что должны сказать об этом документы Python:
list.append(x): добавьте элемент в конец списка; эквивалентно [len (a):] = [x].
list.extend(L): Расширить список, добавив все элементы в данный список; эквивалентному [len (a):] = L.
Итак, в + = вы предоставляете список, добавьте новый элемент.
Так как там также
list.extend(l)
который добавляет все элементы данного списка, я бы использовал
list.append(1)
для симметрии и удобочитаемости.
В то время как большинство людей предпочитают вариант append, я лично предпочитаю другой, потому что он выглядит лучше, хотя он может быть медленнее (или, возможно, оптимизирован).
Красивая лучше, чем уродливая.
Когда вы пишете много кода Python, я обычно не вижу что-то вроде этого:
list.append(1)
Это больше похоже на это:
somecollectionname.append(anotherelementname+5*10)
Так что мне, по крайней мере, лучше видеть:
somecollectionname += [anotherelementname+5*10]
Потому что его легко узнать с первого взгляда, который вы добавляете в список. Сказав это, я иногда оказываюсь с использованием обеих форм.
list.append(1) более читабельны и соответствуют контексту
Если у вас есть один элемент, a
, который вы хотите добавить в свой список l
, а затем помещайте a
в свой собственный список и расширяя l
, с ним кажется добавлением ненужной сложности. Поэтому я предпочел бы
l.append(a)
над
l += [a]
Если a
уже является списком, выберите
l += a
или
l.extend(a)
является вопросом предпочтения, ИМО. С другой стороны, если вы собираетесь делать много расширений, вы можете повысить производительность путем "подъема" метода поиска:
extend = l.extend
for sublist in bunch_of_lists:
extend(sublist)
Наконец, я думаю, что операция добавления не используется слишком часто в Pythonic-коде, потому что append используется очень часто в "аккумуляторах" идиомах, где я ожидаю, что более опытный программист на Python будет использовать понимание списка /etc.
Итак, вместо:
l = []
for a in numbers:
l.append(str(a))
Вероятно, вы увидите:
l = [str(a) for a in numbers]
или
l = map(str, numbers)
Вы заметили в своем вопросе термин "больше pythonic"? Я думаю, это означает, что вы задаете не очень полезный вопрос.
Если вы просто более питоничны, чем другие (а не pythonic, а другой - нет) можно сказать, что у вас есть нарушил Дзен Питона на мета-уровне: "Простой лучше, чем сложный", также следует придерживаться процесс поиска формы, в которой вы выражаете ваша логика - как только вы нашли что-то питоновское, это достаточно хорошо. Держите поиск простым.
Итак, я бы ответил: Ни один из них не является более питоническим. Самая пифоническая вещь - продолжать и писать приятную программу.