Найти в Дзене
Нулевой Data Scientist

Чем отличается метод обработки списка append от extend в Python?

Банальный и простой вопрос для опытного разработчика, но не точно такой же для изучающего Python. В своем обучении дошел до Python, а именно типов данных, а еще "именнее" - списки. Так вот, в методах обработки списков есть два метода - append и extend, которые делают одно и тоже действие - добавляют элементы одного списка в конец другого. Это так, но есть отличие. На написание этой статьи, меня побудил диалог с разработчиком, который уже достаточное количество времени работает, чтобы ответить на этот вопрос. Но это были мои предположения. Оказалось, задав ему вопрос темы этой статьи, он впал в легкий ступор. Не смог сразу объяснить, полез в документацию, начал с коленки мне показывать отличия, но внятно так и не объяснил. Я ничего в этом плохого не вижу, ведь зачастую, выполняя сложные рабочие задачи, простые такие вопросы замыливаются и забываются. А для изучающих Python это и вовсе пока лес дремучий. Поэтому давайте будем снисходительными к таким темам и вопросам. Продолжим. Идем,
Оглавление
Фото взято с https://unsplash.com
Фото взято с https://unsplash.com

Банальный и простой вопрос для опытного разработчика, но не точно такой же для изучающего Python.

В своем обучении дошел до Python, а именно типов данных, а еще "именнее" - списки. Так вот, в методах обработки списков есть два метода - append и extend, которые делают одно и тоже действие - добавляют элементы одного списка в конец другого. Это так, но есть отличие.

На написание этой статьи, меня побудил диалог с разработчиком, который уже достаточное количество времени работает, чтобы ответить на этот вопрос. Но это были мои предположения. Оказалось, задав ему вопрос темы этой статьи, он впал в легкий ступор. Не смог сразу объяснить, полез в документацию, начал с коленки мне показывать отличия, но внятно так и не объяснил. Я ничего в этом плохого не вижу, ведь зачастую, выполняя сложные рабочие задачи, простые такие вопросы замыливаются и забываются. А для изучающих Python это и вовсе пока лес дремучий. Поэтому давайте будем снисходительными к таким темам и вопросам. Продолжим.

Идем, в официальную документацию Python и читаем, что там написано. Вот про append.

-2

А это про метод extend.

-3

Итак, тут вроде бы уже видно отличие, что первый добавляет элемент в конец списка, а второй добавляет итерируемый объект, если я правильно перевожу с инглиша. Но как это работает в реальности? Мы ведь в обоих случаях добавляем что-то в конец списка. Разберемся.

Append

Итак, есть список:

a = [-7, -5, 1, 2, 3, 4, 5]

В этот список методом append добавим другой список, который состоит из строк ['a', 'b', 'c','d']

a.append(['a', 'b', 'c', 'd'])

Проверяем теперь наш список, вызвав его.

print(a)
[-7, -5, 1, 2, 3, 4, 5, ['a', 'b', 'c', 'd']

Получился список в списке и все как в описании метода, мы добавили новый элемент в виде списка ['a', 'b', 'c','d'] в конец нашего списка a. Двигаемся дальше.

Extend

Снова берем исходный список, не измененный append, т.е. первоначальный [-7, -5, 1, 2, 3, 4, 5] и добавляем в него те же самые ['a', 'b', 'c','d'], задавая их также, как и в первом случае, единым списком и применяем метод extend.

a.extend(['a', 'b', 'c', 'd'])

Программа возвращает нам новый список:

[-7, -5, 1, 2, 3, 'a', 'b', 'c', 'd']

На первый взгляд тоже самое. Но есть отличия.

Метод extend вернул нам список не с новым элементом ['a', 'b', 'c','d'], т.е. единый список, а в виде отдельных строчных элементов 'a', 'b', 'c', 'd'. Это видно по отсутствующим квадратным скобкам перед 'a'. Покажу в едином блоке, для наглядности.

Я взял переменную lst и присвоил ей нашу коллекцию ['a', 'b', 'c','d'].

lst = ['a', 'b', 'c','d']

Копируем список а и присваиваем копии переменную b и с. Т.е. у нас сейчас есть три одинаковых списка в разных переменных.

Далее применяем к спискам b и с методы append и extend соответственно, добавляя список lst. И выводим все три переменные, где видно исходный список a, измененный методом append список b и измененный методом extend список c.

В последнем списке наши буквы встали в ряд на тех же правах как и цифры, которые там были, т.е. отдельными элементами и теперь у нас просто один список из раздельных элементов -7, -5, 1, 2, 3, 4, 5, 'a', 'b', 'c', 'd'.

вот так это выглядит в коде
вот так это выглядит в коде

Надеюсь тебе, изучающему Python, стало понятнее чем эти два метода отличаются.

Буду признателен за обратную связь! Подписывайся на мой канал, задавай вопросы и ставь лайк!

Ссылки на мои ресурсы:

Дзен-канал - тут будут полноценные статьи, обзоры, видео.

Телеграм канал - краткие посты, мысли “на ходу” и что-то быстрое и простое для восприятия.