Добавление элементов в список
Списки - одна из самых полезных структур данных, доступных в Python или любом другом языке программирования, поскольку они используются во многих различных алгоритмах и решениях.
После того, как мы создали список, часто нам может потребоваться
добавить к нему новые элементы, будь то в конце, в начале или где-то
посередине. Python предлагает нам для этого три разных метода. В этой
статье я покажу различия между append
, extend
и insert
списка.
Добавить
Этот метод добавляет элемент в конец существующего списка. Синтаксис для его использования:
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):] = x
.
Например:
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
как
отдельные и уникальные элементы результирующего списка.
Все это согласуется с тем, что мы видели ранее, то есть append
и
insert
добавляют только один элемент. Принимая во внимание, что
extend
расширяет исходный список, добавляя элементы второго списка в
его конец.
Еще одно отличие, которое следует учитывать, - это показатель эффективности. Учитывая, как работает каждая операция, мы можем довольно легко определить временную сложность каждого метода. Или вы можете просто обмануть и проверить страницу сложности времени на вики-странице python.org.
Временные сложности следующие:
Методика Сложность времени
append()
О (1)
insert()
На)
extend()
ОК)
Здесь «n» - это количество элементов, находящихся в данный момент в списке, а «k» - это количество элементов в объекте параметра.
Эти моменты показывают, что эти три метода дополняют друг друга. Мы должны выбрать, какой из них использовать, в соответствии с нашими потребностями:
- Если мы хотим добавить элемент в конец списка, мы должны
использовать
append
. Это быстрее и прямо. - Если мы хотим добавить элемент где-нибудь в списке, мы должны
использовать
insert
. Это единственный вариант для этого. - Если мы хотим объединить элементы другой итерации в наш список, то
мы должны использовать
extend
.
Заключение
Python предлагает несколько вариантов добавления элементов в список, каждый из которых дополняет друг друга и имеет свои собственные варианты использования. В этой статье мы представили три из этих вариантов, как использовать каждый и когда использовать каждый. Выбор метода должен основываться на ваших потребностях.