Автор оригинала: Scott Robinson.
Добавление элементов в список
Списки-это одна из самых полезных структур данных, доступных в Python или любом другом языке программирования, поскольку они используются в очень многих различных алгоритмах и решениях.
После того, как мы создали список, часто нам может понадобиться добавить в него новые элементы, будь то в конце, начале или где-то посередине. Python предлагает нам три различных метода для этого. В этой статье я покажу различия между методами append
, extend
и insert
list.
Добавлять
Этот метод добавляет элемент в конец существующего списка. Синтаксис для его использования таков:
a.append(x)
Здесь переменная a
– это наш список, а x
– добавляемый элемент. Это выражение эквивалентно a[len(a):] = [x]
.
Например, вот как использовать его для размещения элемента “y” в конце нашего списка, a
:
a = [1, 'x', 2] a.append('y') print(a)
Запуск этого кода приведет к следующему результату:
$ python append.py [1, 'x', 2, 'y']
Вставить
Этот метод вставляет элемент в заданную позицию в заданном списке. Синтаксис таков:
a.insert(i, x)
Здесь аргумент i
является индексом элемента перед которым вставляется элемент x
. Таким образом, a.insert(len(a), x)
– это то же самое, что a.append(x)
. Хотя сила этого метода заключается в том, что он использует его для размещения элементов где-то в списке, а не в конце. Если вам нужно было только добавить элемент в конец списка, то append
отлично подходит для этого и работает быстрее (что имеет значение для больших списков).
Например:
a = [1, 'x', 'y'] a.insert(2, 2) print(a)
Этот код приведет к следующему результату:
$ python insert.py [1, 'x', 2, 'y']
Как вы можете видеть, данный элемент помещается в любом месте указанного нами списка. Это хорошо работает, когда у вас есть список, в котором его элементы упорядочены, поэтому вы не можете просто добавить свой элемент в конец, как вы сделали бы с append
.
Расширять
Этот метод добавляет элементы (обратите внимание на его множественное число!) в список, добавляя все элементы итерабли, которые вы ему передаете. Результирующий список-это список, содержащий все элементы обоих списков.
Синтаксис использования этого метода таков:
a.extend(x)
В этом случае a
– это наш список, а x
– итеративный объект, например другой список. Этот метод эквивалентен a[len(a):]
.
Например:
a = [1, 'x', 'y'] b = [1, 2] a.extend(b) print(a)
Запуск этого кода приводит к следующему результату:
$ python extend.py [1, 'x', 'y', 1, 2]
Обратите внимание, как два списка были объединены вместе, один за другим.
В Python вы также можете достичь тех же результатов, выполнив простое сложение. Таким образом, a + b
в этом случае приведет к тому же самому точному массиву , что и наш сценарий выше. Это происходит благодаря методу __add__ ()
, реализованному в списках, но это выходит за рамки данной статьи.
Сравнение Каждого Метода
Чтобы увидеть различные результаты, полученные с помощью этих методов, давайте проведем прямое сравнение, выполнив следующий код:
a1 = [1, 'x', 'y'] a2 = [1, 'x', 'y'] a3 = [1, 'x', 'y'] b = [2, 3] a1.append(b) a2.insert(3, b) a3.extend(b) print(a1) print(a2) print(a3)
В этой программе мы определили три списка с точно такими же элементами. Мы также определили второй список, который мы добавляем, вставляем и расширяем к каждому из трех аналогичных списков, определенных ранее. В результате получается следующее:
$ python all.py [1, 'x', 'y', [2, 3]] [1, 'x', 'y', [2, 3]] [1, 'x', 'y', 2, 3]
Как мы видим, и append
, и insert
добавляют список b
к исходному списку, но как единый элемент, который является списком. Другими словами, он не добавляет каждый элемент b
по отдельности, а вместо этого добавляет сам объект целиком.
Метод extend
, с другой стороны, фактически добавляет отдельные элементы списка b
как отдельные и уникальные элементы результирующего списка.
Все это согласуется с тем, что мы видели ранее, то есть добавить
и вставить
добавить только один элемент. В то время как extend
расширяет исходный список, добавляя элементы второго списка в его конце.
Еще одно различие, которое следует учитывать, – это мера эффективности. Учитывая, как работает каждая операция, мы можем довольно легко вычислить временную сложность для каждого метода. Или вы можете просто обмануть и проверить страницу Time Complexity on python.org-это вики-страница.
Временные сложности заключаются в следующем:
добавлять() | O(1) |
вставлять() | O(n) |
расширять() | O(k) |
Здесь “n” – это количество элементов, находящихся в данный момент в списке, а “k” – количество элементов в объекте параметра.
Эти пункты показывают, что эти три метода дополняют друг друга. Мы должны выбрать, какой из них использовать, в соответствии с нашими потребностями:
- Если мы хотим добавить элемент в конец списка, мы должны использовать
append
. Это быстрее и прямее. - Если мы хотим добавить элемент где-то в списке, мы должны использовать
insert
. Это единственный вариант для этого. - Если мы хотим объединить элементы другой итерации в наш список, то мы должны использовать
extend
.
Обертывание
Python предлагает несколько вариантов добавления элементов в список, каждый из которых дополняет друг друга и имеет свои собственные варианты использования. В этой статье мы представили три из этих вариантов, как использовать каждый и когда использовать каждый. Выбор метода должен основываться на ваших потребностях.