Подтвердить что ты не робот

List.append или list + =?

Что больше pythonic?

list.append(1)

или

list += [1]
4b9b3361

Ответ 1

list.append(1) выполняется быстрее, поскольку он не создает объект временного списка.

Ответ 2

Из Zen of Python:

Явный лучше, чем неявный.

Итак: list.append(1)

Ответ 3

Это две разные операции, то, что вы делаете с + =, - это операция расширения. Вот что должны сказать об этом документы Python:

list.append(x): добавьте элемент в конец списка; эквивалентно [len (a):] = [x].

list.extend(L): Расширить список, добавив все элементы в данный список; эквивалентному [len (a):] = L.

Итак, в + = вы предоставляете список, добавьте новый элемент.

Ответ 4

Так как там также

list.extend(l)

который добавляет все элементы данного списка, я бы использовал

list.append(1)

для симметрии и удобочитаемости.

Ответ 5

В то время как большинство людей предпочитают вариант append, я лично предпочитаю другой, потому что он выглядит лучше, хотя он может быть медленнее (или, возможно, оптимизирован).

Красивая лучше, чем уродливая.

Когда вы пишете много кода Python, я обычно не вижу что-то вроде этого:

list.append(1)

Это больше похоже на это:

somecollectionname.append(anotherelementname+5*10)

Так что мне, по крайней мере, лучше видеть:

somecollectionname += [anotherelementname+5*10]

Потому что его легко узнать с первого взгляда, который вы добавляете в список. Сказав это, я иногда оказываюсь с использованием обеих форм.

Ответ 6

list.append(1) более читабельны и соответствуют контексту

Ответ 7

Если у вас есть один элемент, 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)

Ответ 8

Остерегайтесь фундаментализма

Вы заметили в своем вопросе термин "больше pythonic"? Я думаю, это означает, что вы задаете не очень полезный вопрос.

Если вы просто более питоничны, чем другие (а не pythonic, а другой - нет) можно сказать, что у вас есть нарушил Дзен Питона на мета-уровне: "Простой лучше, чем сложный", также следует придерживаться процесс поиска формы, в которой вы выражаете ваша логика - как только вы нашли что-то питоновское, это достаточно хорошо. Держите поиск простым.

Итак, я бы ответил: Ни один из них не является более питоническим. Самая пифоническая вещь - продолжать и писать приятную программу.