Списки в 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 • Коллекция • Кортеж • Список • Типы данных

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.