Список – это изменяемый тип данных Python 3, который представляет собой упорядоченную последовательность элементов. Элементы списков называются объектами. Все объекты списка должны находиться в квадратных скобках.
Списки отлично подходят для работы с большим количеством связанных между собой значений. Они позволяют компактно хранить связанные данные, уплотнить код, а также применять одни и те же методы и функции к нескольким значениям одновременно.
Чтобы понять, что такое список (или любой другой тип данных, представляющий собой коллекцию), просто представьте какую-либо коллекцию объектов, которую вы храните на локальном компьютере: набор файлов, список песен, коллекцию видео и т.п.
Итак, для начала создайте тестовый список, который состоит из таких строк:
sea_creatures = ['shark', 'cuttlefish', 'squid', 'mantis shrimp', 'anemone']
Попробуйте запросить этот список:
print(sea_creatures)
['shark', 'cuttlefish', 'squid', 'mantis shrimp', 'anemone']
Поскольку список является упорядоченной последовательностью, его объекты можно вызывать в индивидуальном порядке с помощью индексов. Списки – это составной тип данных, то есть каждый список включает в себя ряд меньших объектов.
Данное руководство научит вас пользоваться списками в Python.
Индексация списков
Каждый объект в списке имеет свой индекс. Индексация начинается с 0.
К примеру, тестовый список sea_creatures индексируется так:
‘shark’ | ‘cuttlefish’ | ‘squid’ | ‘mantis shrimp’ | ‘anemone’ |
0 | 1 | 2 | 3 | 4 |
Благодаря тому, что каждый объект имеет свой индекс, со списками можно работать так же, как и с последовательными типами данных.
С помощью индекса можно запросить любой объект списка:
print(sea_creatures[1])
cuttlefish
Диапазон индексов данного списка – от 0 до 4. Вы можете отобразить любой объект из этого списка:
sea_creatures[0] = 'shark'
sea_creatures[1] = 'cuttlefish'
sea_creatures[2] = 'squid'
sea_creatures[3] = 'mantis shrimp'
sea_creatures[4] = 'anemone'
Однако если заданный индекс не входит в диапазон, на экране появится сообщение об ошибке:
print(sea_creatures[18])
IndexError: list index out of range
Индексы могут быть как положительными, так и отрицательными. Отрицательная индексация начинается с -1.
‘shark’ | ‘cuttlefish’ | ‘squid’ | ‘mantis shrimp’ | ‘anemone’ |
-5 | -4 | -3 | -2 | -1 |
К примеру, чтобы запросить объект ‘squid’ по его отрицательному индексу, нужно ввести:
print(sea_creatures[-2])
squid
Также объекты списков можно объединять со строками с помощью оператора +:
print(' The largest known extant fish is a whale ' + sea_creatures[0])
The largest known extant fish is a whale shark
Примечание: Оператор + также может склеивать 2 или больше списков, узнать об этом больше можно далее в данном руководстве.
Изменение объектов списка
С помощью индексации можно изменять объекты внутри списка. Для этого нужно указать индекс объекта и присвоить ему новое значение.
К примеру, попробуйте сменить объект с индексом 1 ‘cuttlefish’ на ‘octopus’:
sea_creatures[1] = 'octopus'
Запросите список sea_creatures:
print(sea_creatures)
['shark', 'octopus', 'squid', 'mantis shrimp', 'anemone']
Изменять объекты можно и с помощью отрицательного индекса:
sea_creatures[-3] = 'blobfish'
print(sea_creatures)
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone']
Объект ‘squid’ был заменён объектом ‘blobfish’.
Срез списков
Также вы можете вызывать несколько объектов из списка (к примеру, только объекты с индексом от 1 до 3). Это называется срезом. Срез включает в себя диапазон объектов списка в формате [x:y]:
print(sea_creatures[1:4])
['octopus', 'blobfish', 'mantis shrimp']
Первый индекс в срезе – начало диапазона (включительно), второй – конец диапазона (исключительно). Потому срез включает в себя только объекты с индексами 1, 2 и 3.
Чтобы включить в срез первый или последний объект списка, достаточно пропустить соответствующий индекс в квадратных скобках list[x:y]. К примеру, чтобы вывести первые три объекта списка, можно ввести:
print(sea_creatures[:3])
['shark', 'octopus', 'blobfish']
Чтобы включить в срез все объекты в списке, начиная с объекта с индексом 2, нужно ввести:
print(sea_creatures[2:])
['blobfish', 'mantis shrimp', 'anemone']
Также для этого можно использовать отрицательные индексы:
print(sea_creatures[-4:-2])
print(sea_creatures[-3:])
['octopus', 'blobfish']
['blobfish', 'mantis shrimp', 'anemone']
Также в срезе можно задавать шаг – количество объектов, которые нужно пропустить после первого извлеченного объекта. По умолчанию шаг=1, то есть, Python выводит каждый объект списка.
Синтаксис этой конструкции выглядит так:
list[x:y:z]
где z – размер шага. Создайте новый список, а затем задайте срез и шаг:
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
print(numbers[1:11:2])
[1, 3, 5, 7, 9]
Конструкция numbers[1:11:2] выводит из списка все объекты с индексами в диапазоне от 1 до 11 с шагом 2 (т.е., через один).
Чтобы задать шаг для всего списка, можно пропустить первые два параметра:
print(numbers[::3])
[0, 3, 6, 9, 12]
Это выведет каждый третий объект:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
Изменение списков с помощью операторов
Для изменения списков можно использовать операторы. Рассмотрим использование операторов + и * и их составные аналоги += и *=.
Оператор + используется для конкатенации двух и более списков:
sea_creatures = ['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone']
oceans = ['Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']
print(sea_creatures + oceans)
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']
С помощью оператора + можно добавлять объекты в список (объект нужно взять в квадратные скобки).
sea_creatures = sea_creatures + ['yeti crab']
print (sea_creatures)
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']
Оператор * позволяет умножать количество объектов в списке.
Например, попробуйте увеличить количество объектов в списке sea_creatures вдвое, а в oceans – втрое.
print(sea_creatures * 2)
print(oceans * 3)
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']
['Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']
Также в списках можно применять составные операторы += и *=. С их помощью можно автоматически добавить в списки заполнители (к примеру, для пользовательского ввода).
Попробуйте добавить в список sea_creatures новый объект и создать цикл с помощью оператора +=.
for x in range(1,4):
sea_creatures += ['fish']
print(sea_creatures)
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish']
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish', 'fish']
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish', 'fish', 'fish']
Оператор *= работает аналогично:
sharks = ['shark']
for x in range(1,4):
sharks *= 2
print(sharks)
['shark', 'shark']
['shark', 'shark', 'shark', 'shark']
['shark', 'shark', 'shark', 'shark', 'shark', 'shark', 'shark', 'shark']
Удаление объекта из списка
Объекты можно удалять из списков с помощью оператора del. Для этого нужно указать индекс объекта.
Вернёмся к списку sea_creatures и попробуем удалить объект ‘octopus’. Его индекс – 1. Чтобы удалить объект, используйте оператор del и укажите в квадратных скобках индекс объекта:
sea_creatures =['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']
del sea_creatures[1]
print(sea_creatures)
['shark', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']
Теперь этого объекта нет в списке.
Также оператору del можно задавать диапазон объектов. К примеру, попробуйте удалить ‘octopus’, ‘blobfish’ и ‘mantis shrimp’.
sea_creatures =['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']
del sea_creatures[1:4]
print(sea_creatures)
['shark', 'anemone', 'yeti crab']
Как и в срезах, первый параметр задаётся включительно, а последний – исключительно.
Вложенные списки
Списки могут состоять из нескольких списков. При этом каждый список является объектом, его нужно брать в квадратные скобки. Такие списки называются вложенными. Например:
sea_names = [['shark', 'octopus', 'squid', 'mantis shrimp'],['Jesse', 'Sammy', 'Drew', 'Jamie']]
Для того, чтобы вызвать элемент такого списка, нужно использовать несколько индексов:
print(sea_names[1][0])
print(sea_names[0][0])
Jesse
shark
при этом индексация применяется и к спискам, и к объектам внутри них. Потому, запрашивая объект, нужно сначала указывать индекс списка, а затем – индекс объекта.
В данном списке объекты имеют такие индексы:
sea_names[0][0] = 'shark'
sea_names[0][1] = 'octopus'
sea_names[0][2] = 'squid'
sea_names[0][3] = 'mantis shrimp'
sea_names[1][0] = 'Jesse'
sea_names[1][1] = 'Sammy'
sea_names[1][2] = 'Drew'
sea_names[1][3] = 'Jamie'
Заключение
Списки – гибкий тип данных, который можно изменять в процессе разработки программы.
Читайте также: