Site icon 8HOST.COM

Работа со списками в Python 3

Список – это изменяемый тип данных 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'

Заключение

Списки – гибкий тип данных, который можно изменять в процессе разработки программы.

Читайте также: