Списки в Python
09.02.2018
Теги: Python • Коллекция • Список • ТипыДанных
Для группировки множества элементов в питоне используется список, который может быть записан как индексированная последовательность значений, разделенных запятыми, заключенная в квадратные скобки. Списки имеют произвольную вложенность, т.е. могут включать в себя любые вложенные списки.
Примеры
Создание списка, доступ к отдельным элементам по индексу
>>> spam = ['cat', 'bat', 'rat', 'dog'] >>> spam ['cat', 'bat', 'rat', 'dog'] >>> spam[0] 'cat' >>> spam[1] 'bat' >>> spam[-1] 'dog'
Элементы списков сами могут быть списками. Доступ к значениям в таких списках осуществляется с помощью нескольких индексов
>>> spam = [['cat', 'bat'], [10, 20, 30, 40, 50]] >>> spam[0] ['cat', 'bat'] >>> spam[0][1] 'bat' >>> spam[1][4] 50
Получение части списка с помощью среза
>>> spam = ['cat', 'bat', 'rat', 'dog'] >>> spam[0:4] ['cat', 'bat', 'rat', 'dog'] >>> spam[1:3] ['bat', 'rat'] >>> spam[0:-1] ['cat', 'bat', 'rat']
Допускается сокращенная запись среза с пропуском одного или двух индексов. Отсутствующий первый индекс равносилен использованию нуля. Отсутствующий второй индекс означает расширение до конца списка.
>>> spam = ['cat', 'bat', 'rat', 'dog'] >>> spam[0:2] ['cat', 'bat'] >>> spam[1:] ['bat', 'rat', 'dog'] >>> spam[:] ['cat', 'bat', 'rat', 'dog']
Получение длины списка
>>> spam = ['cat', 'bat', 'rat', 'dog'] >>> len(spam) 4
Изменение значений по индексу
>>> spam = ['cat', 'bat', 'rat', 'dog'] >>> spam[1] = 'elephant' >>> spam ['cat', 'elephant', 'rat', 'dog']
Конкатенация и репликация списков
>>> [1, 2, 3] + ['a', 'b', 'c'] [1, 2, 3, 'a', 'b', 'c'] >>> ['x', 'y', 'z'] * 3 ['x', 'y', 'z', 'x', 'y', 'z', 'x', 'y', 'z']
Удаление значений из списка с помощью инструкции del
>>> spam = ['cat', 'bat', 'rat', 'dog'] >>> del spam[2] >>> spam ['cat', 'rat', 'dog']
Использование цикла для перебора всех элементов списка
spam = ['cat', 'bat', 'rat', 'dog'] for i in range(len(spam)): print('index = ' + str(i) + ', value = ' + spam[i])
index = 0, value = cat index = 1, value = bat index = 2, value = rat index = 3, value = dog
Определить, содержит ли список определенное значение можно с помощью операторов in
и not in
>>> spam = ['cat', 'bat', 'rat', 'dog'] >>> 'cat' in spam True >>> 'elephant' in spam False >>> 'elephant' not in spam True
Трюк с групповым присваиванием
>>> cat = ['fat', 'black', 'loud'] >>> size, color, disposition = cat >>> size 'fat' >>> color 'black'
Поиск значения в списке с помощью метода index()
>>> spam = ['cat', 'bat', 'rat', 'dog'] >>> spam.index('bat') 1
Добавление значений в список с помощью методов append()
и insert()
>>> spam = ['cat', 'bat', 'rat'] >>> spam.append('elephant') >>> spam ['cat', 'bat', 'rat', 'elephant']
>>> spam = ['cat', 'bat', 'rat'] >>> spam.insert(1, 'chicken') >>> spam ['cat', 'chicken', 'bat', 'rat']
Удаление значений из списка с помощью метода remove()
. Если в списке несколько одинаковых значений, будет удалено только первое.
>>> spam = ['cat', 'bat', 'rat', 'dog'] >>> spam.remove('bat') >>> spam ['cat', 'rat', 'dog']
Сортировка значений в списке с помощью метода sort()
>>> spam = ['cat', 'bat', 'rat', 'dog'] >>> spam.sort() >>> spam ['bat', 'cat', 'dog', 'rat']
Кортеж — список, значения которого не могут изменяться, добавляться и удаляться.
>>> spam = ('cat', 'bat', 'rat', 'dog') >>> spam[1] = 'elephant' Traceback (most recent call last): File "<pyshell#12>", line 1, in <module> spam[1] = 'elephant' TypeError: 'tuple' object does not support item assignment
Преобразование типов с помощью функций list()
и tuple()
>>> tuple(['cat', 'bat', 'rat', 'dog']) ('cat', 'bat', 'rat', 'dog') >>> list(('cat', 'bat', 'rat', 'dog')) ['cat', 'bat', 'rat', 'dog'] >>> list('hello') ['h', 'e', 'l', 'l', 'o']
Списки нельзя скопировать просто присвоив одну переменную другой, т.к. в этом случае копируется ссылка на объект. В итоге при изменении объекта через одну переменную, изменения отражаются на другой.
>>> spam = [0, 1, 2, 3, 4, 5] >>> cheese = spam >>> cheese[1] = 'hello' >>> spam [0, 'hello', 2, 3, 4, 5] >>> cheese [0, 'hello', 2, 3, 4, 5]
При передаче списка в качестве параметра функции, передача происходит по ссылке, а не по значению.
def eggs(param) param.append('hello') spam = [1, 2, 3] eggs(spam) print(spam)
[1, 2, 3, 'hello']
Для копирования списка используется метод copy()
>>> spam = [0, 1, 2, 3, 4, 5] >>> cheese = spam.copy() >>> cheese[1] = 'hello' >>> cheese [0, 'hello', 2, 3, 4, 5] >>> spam [0, 1, 2, 3, 4, 5]
Если список, копию которого нужно создать, сам содержит списки, нужно использовать метод deepcopy()
модуля copy
.
>>> import copy >>> spam = [1, 2, 3, [1, 2, 3]] >>> deep = copy.deepcopy(spam)
Генератор цикла объединяет цикл for
, условие if
и создание новых элементов в одну строку и автоматически присоединяет к списку все новые элементы
>>> square = [value**2 for value in range(1,11)] >>> square [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> square = [value**2 for value in range(1,11) if value % 2 == 0] >>> square [4, 16, 36, 64, 100]
Поиск: Python • Коллекция • Кортеж • Список • Типы данных