list.append или list + =? - PullRequest
27 голосов
/ 09 мая 2009

Что более питонично?

list.append(1)

или

list += [1]

Ответы [ 8 ]

59 голосов
/ 09 мая 2009

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

54 голосов
/ 09 мая 2009

Из Дзэн Питона :

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

Итак: list.append(1)

17 голосов
/ 10 мая 2009

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

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

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

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

7 голосов
/ 09 мая 2009

Так как есть также

list.extend(l)

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

list.append(1)

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

6 голосов
/ 10 мая 2009

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

Красиво лучше, чем безобразно.

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

list.append(1)

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

somecollectionname.append(anotherelementname+5*10)

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

somecollectionname += [anotherelementname+5*10]

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

4 голосов
/ 10 мая 2009

Если у вас есть один элемент, 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, потому что добавление очень часто используется в идиомах «накопителя», где я ожидаю, что более опытный программист Python будет использовать понимание списка / etc .

Так что вместо:

l = []
for a in numbers:
    l.append(str(a))

Вы, вероятно, увидите:

l = [str(a) for a in numbers]

или

l = map(str, numbers)
4 голосов
/ 09 мая 2009

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

1 голос
/ 23 февраля 2015

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...