Share This
Связаться со мной
Крути в низ
Categories
//Списковые методы append() и extend(): объяснение на примерах

Списковые методы append() и extend(): объяснение на примерах

26.06.2021Category : Python

При работе со списками часто приходится комбинировать данные нескольких списков. Как это делается в Python?

spiskovye metody append i extend objasnenie na primerah 64df4e0 - Списковые методы append() и extend(): объяснение на примерах

Добавление элементов в список напоминает добавление вагонов в состав поезда

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

Как в Python используется оператор +

Прежде чем приступить к методам append() и extend(), давайте посмотрим, как происходит конкатенация (объединение) списков при помощи оператора +.

Допустим, у нас есть два списка, list_1 и list_2, которые мы хотим объединить (то есть склеить вместе два целых списка).

list_1 = [1,2,3,4,5] list_2 = [6,7,8]  print(list_1 + list_2) # Output [1, 2, 3, 4, 5, 6, 7, 8]  print(list_1) # Output [1, 2, 3, 4, 5]  print(list_2) # Output [6, 7, 8]

Если вы внимательно прочтете приведенный выше код, вы заметите следующие вещи:

  • list_1 + list_2 не добавляет элементы из list_2 в list_1.
  • Вместо этого создается новый список, содержащий элементы из list_1 и list_2.
  • В результате сами списки list_1 и list_2 остаются в первозданном виде.

Но что, если нам нужно не создавать новый список, а модифицировать list_1? Давайте воспользуемся для этого методами append() и extend().

Использование метода append() в Python

Возьмем наш пример из предыдущего раздела, но теперь попробуем изменить первый список, добавив в него элементы второго.

В коде, приведенном ниже, для списка list_1 вызывается метод append(), которому в качестве аргумента передается list_2.

# Добавим list_2 к list_1 list_1.append(list_2) print(list_1)  # Output [1, 2, 3, 4, 5, [6, 7, 8]]   # Выведем длину list_1 print(len(list_1))  # Output 6

Мы видим, что list_2 добавился в конец list_1 как отдельный элемент.

Таким образом, длина list_1 в результате операции append() увеличилась на единицу.

Но что, если мы хотим добавить в list_1 не список list_2 целиком, как отдельный элемент, а все элементы этого списка? Мы рассмотрим, как это делается, в следующем разделе.

Использование метода extend() в Python

Прежде чем воспользоваться методом extend(), давайте проделаем следующие шаги:

  • переберем в цикле list_2
  • добавим каждый элемент list_2 в list_1 при помощи метода append().
for item in list_2:   list_1.append(item)  print(list_1)  # Output [1, 2, 3, 4, 5, 6, 7, 8]

Итак, мы добавили все элементы второго списка в первый — как и хотели.

То же самое можно сделать путем вызова метода extend() для list_1. В качестве аргумента методу передается list_2. Как это работает, вы можете видеть в следующем примере:

# Расширим list_1 за счет элементов из list_2 list_1.extend(list_2) print(list_1)  # Output [1, 2, 3, 4, 5, 6, 7, 8]  # Выведем длину list_1 print(len(list_1))  # Output 8

Таким образом, если вы расширяете список с длиной len1 за счет элементов списка с длиной len2, то длина списка, для которого вызвали метод extend(), станет len1 + len2.

Есть ли здесь какие-то подводные камни?

Допустим, мы хотим добавить к первому списку не целый список (или любой другой итерируемый объект), а какой-то один элемент. Давайте используем метод append() и добавим к списку list_1 булево значение True.

list_1 = [1,2,3,4,5] list_1.append(True) print(list_1)  # Output [1, 2, 3, 4, 5, True]

А что будет, если мы попытаемся использовать с той же целью метод extend()?

list_1 = [1,2,3,4,5] list_1.extend(True) print(list_1)  # Output --------------------------------------------------------------------------- TypeError                                 Traceback (most recent call last) <ipython-input-16-9e4e0d6da67b> in <module>()       1 list_1 = [1,2,3,4,5] ----> 2 list_1.extend(True)       3 print(list_1)  TypeError: 'bool' object is not iterable

Это приводит к ошибке. Давайте разберем полученное сообщение. TypeError: ‘bool’ object is not iterable. Это значит, что у нас был аргумент неподходящего типа.

Метод extend() принимает в качестве аргумента только итерируемые объекты. «Под капотом» extend() перебирает в цикле итерируемый объект и добавляет каждый его элемент к первому списку.

Итерируемый объект — это любой объект, который вы можете перебрать в цикле и получить доступ к каждому отдельному элементу этого объекта. Для использования с extend() годятся списки, множества, кортежи и строки.

Общий синтаксис использования метода extend() — list_name.extend(iterable).

Использование методов extend() и append() со строками

Строки, по сути своей, — последовательности символов, а значит, они относятся к итерируемым объектам. Давайте попробуем применить методы extend() и append() к list_1, а в качестве аргумента передать строку.

Добавим к списку list_1 строку ‘Happy’ при помощи метода append().

list_1 = [1,2,3,4,5] list_1.append('Happy') print(list_1)  # Output [1, 2, 3, 4, 5, 'Happy']

А теперь давайте попробуем сделать то же самое при помощи метода extend(). Сейчас у нас не должно возникнуть ошибок. По идее, метод extend() переберет строку и добавит каждый символ к list_1. Давайте посмотрим, сработает ли.

list_1 = [1,2,3,4,5] list_1.extend('Happy') print(list_1)  # Output [1, 2, 3, 4, 5, 'H', 'a', 'p', 'p', 'y']

Что касается временной сложности этих методов, мы интуитивно догадываемся, что append() имеет постоянное время выполнения, а время выполнения extend() пропорционально зависит от длины итерируемого объекта, который передается в качестве аргумента.

Итоги

Надеемся, эта статья помогла вам разобраться, как использовать методы append() и extend() в коде на Python.

spiskovye metody append i extend objasnenie na primerah a39405b - Списковые методы append() и extend(): объяснение на примерах

Свежие вакансии по Python

Для тех, кто хочет найти работу Junior Python Developer

Подписаться ×

  • 6 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Связаться со мной
Close