Методы списка
В Python у списков имеется одиннадцать методов. Условно разделим их на группы:
- увеличивающие количество элементов -
append
,extend
,insert
- уменьшающие количество элементов -
clear
,pop
,remove
- изменяющие порядок элементов -
reverse
,sort
- методы "поиска" -
index
,count
- копирование списка -
copy
Методы append
и extend
производят добавление в конец списка. Разница между ними заключается в том, что с помощью append
можно добавить только один элемент, в то время extend
позволяет расширить список сразу на несколько. При этом оба метода принимают один аргумент. В случае extend
это должна быть итерируемая последовательность (кортеж, список, строка и другое), каждый элемент которой станет отдельным элементом списка.
>>> lst = ['a', 45, 89, 'who']
>>> lst.append(67)
>>> lst
['a', 45, 89, 'who', 67]
>>> b
[1, 2, 3]
>>> c = (9, 10)
>>> b.extend(c)
>>> b
[1, 2, 3, 9, 10]
>>> b.extend("abc")
>>> b
[1, 2, 3, 9, 10, 'a', 'b', 'c']
>>> b.extend([12, 19])
>>> b
[1, 2, 3, 9, 10, 'a', 'b', 'c', 12, 19]
Если требуется вставить элемент в произвольное место списка, используется метод insert
. Он принимает два аргумента: сначала индекс, потом значение. Вставка элемента происходит перед элементом, который до этого занимал указанную позицию.
>>> lst.insert(0,10)
>>> lst
[10, 'a', 45, 89, 'who', 67, 'a1', (1, 2, 3)]
>>> lst.insert(len(lst),10)
>>> lst
[10, 'a', 45, 89, 'who', 67, 'a1', (1, 2, 3), 10]
>>> lst.insert(3, 10)
>>> lst
[10, 'a', 45, 10, 89, 'who', 67, 'a1', (1, 2, 3), 10]
Для удаления из списка одного элемента используют методы remove
и pop
. Метод remove
принимает значение удаляемого элемента, и удаляет первое его вхождение. Если элемента нет в списке, возникает исключение ValueError
. Метод pop
удаляет элемент по индексу. При этом возвращает удаленное из списка значение в программу. Вызов pop()
без аргументов удаляет и возвращает последний элемент. Метод pop
генерирует исключение IndexError
, если указан индекс за пределами диапазона индексов списка.
lst = [4, 3, 5, 1, 8, 1]
d = int(input())
try:
lst.remove(d)
except ValueError:
print('No the item')
print(lst)
1
[4, 3, 5, 8, 1]
2
No the item
[4, 3, 5, 1, 8, 1]
lst = ['a', 'f', 'b', 'x', 'y', 'k']
i = int(input())
try:
value = lst.pop(i)
except IndexError:
value = 'Index Error'
print(value)
2
b
-1
k
10
Index Error
Метод clear
удаляет все элементы из списка.
>>> a = [1, 2]
>>> a.clear()
>>> a
[]
Метод reverse
изменяет порядок элементов на обратный. Метод переворачивает список на месте, то есть тот, к которому применяется.
>>> lst
['a', 10, 89, 'who', 67, 'a1', (1, 2, 3), 10]
>>> lst.reverse()
>>> lst
[10, (1, 2, 3), 'a1', 67, 'who', 89, 10, 'a']
Метод sort
выполняет сортировку списка на месте (список изменяется, а не возвращается новый). Если sort()
вызывается без аргументов, сортировка происходит по возрастанию. Для сортировки по убыванию следует именованному параметру reverse
присвоить True
.
>>> li = [4, 1, 9, 5]
>>> li.sort()
>>> li
[1, 4, 5, 9]
>>> st = [4, 2, 7, 5]
>>> st.sort(reverse=True)
>>> st
[7, 5, 4, 2]
Для более сложных сортировок используется параметр key
, которому присваивается функция, выполняющая действия над каждым элементом списка. Сортировка происходит на основе вернувшихся значений. Подробнее об этом в этой статье.
>>> n = [-4, 3, 9, -5, 2]
>>> n.sort(key=lambda i: abs(i))
>>> n
[2, 3, -4, -5, 9]
Метод count
считает, сколько раз в списке встречается переданный аргумент.
>>> a = [1, 0, 1, 1, 0]
>>> a.count(1)
3
Метод index
возвращает индекс указанного элемента. Если таких значений несколько, метод вернет индекс только первого. Если таких элементов нет, генерируется исключение. Вторым и третьим аргументом можно указать срез для поиска.
>>> a = ['a', 'c', 'e', 'a', 'b']
>>> a.index('a')
0
>>> a.index('a', 2)
3
>>> a.index('a', 2, 4)
3
>>> a.index('a', 2, 3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 'a' is not in list
Метод copy
создает поверхностную копию списка. Так при наличии вложенных списков копируются не они сами, а ссылки на них. В результате изменение вложенных списков через список-оригинал будет видно также в списке-копии.
>>> a = [1, 2]
>>> b = a.copy()
>>> b.append(3)
>>> a
[1, 2]
>>> b
[1, 2, 3]
>>> c = [1, 2, [3, 4]]
>>> d = c.copy()
>>> d.append(5)
>>> c[2].append(6)
>>> c
[1, 2, [3, 4, 6]]
>>> d
[1, 2, [3, 4, 6], 5]