Списковые методы append() и extend(): объяснение на примерах
При работе со списками часто приходится комбинировать данные нескольких списков. Как это делается в Python?
Добавление элементов в список напоминает добавление вагонов в состав поезда
В этой статье мы рассмотрим различные способы комбинирования данных из разных списков. В частности, мы познакомимся с методами 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.
Свежие вакансии по Python
Для тех, кто хочет найти работу Junior Python Developer
Подписаться ×
- 6 views
- 0 Comment