Введение
A list is a data structure in Python that is a mutable, or changeable, ordered sequence of elements. Each element or value that is inside of a list is called an item. Just as strings are defined as characters between quotes, lists are defined by having values between square brackets [ ]
.
Списки отлично подходят для использования, когда вам нужно работать с большим количеством связанных значений. Они позволяют вам хранить вместе данные, которые принадлежат вместе, упрощать ваш код и выполнять одни и те же методы и операции сразу над несколькими значениями.
При размышлениях о списках Python и других структурах данных, которые являются типами коллекций, полезно рассмотреть все различные коллекции, которые у вас есть на вашем компьютере: ваш набор файлов, плейлисты ваших песен, закладки вашего браузера, ваши электронные письма, коллекция видео, к которым у вас есть доступ на стриминговом сервисе, и многое другое.
Предварительные требования
У вас должен быть установлен Python 3 и настроена среда программирования на вашем компьютере или сервере. Если у вас нет настроенной среды программирования, вы можете обратиться к руководствам по установке и настройке для локальной среды программирования или для среды программирования на вашем сервере, подходящей для вашей операционной системы (Ubuntu, CentOS, Debian и т. д.).
Строковые списки
Для начала создадим список, который содержит элементы типа данных строка:
Информация: Чтобы следовать примерам кода в этом руководстве, откройте интерактивную оболочку Python на вашей локальной системе, запустив команду python3
. Затем вы можете копировать, вставлять или редактировать примеры, добавляя их после приглашения >>>
.
Когда мы выводим список, вывод точно такой же, как и список, который мы создали:
Output['shark', 'cuttlefish', 'squid', 'mantis shrimp', 'anemone']
Как упорядоченная последовательность элементов, каждый элемент в списке можно вызвать по отдельности через индексацию. Списки являются составным типом данных, состоящим из более мелких частей, и очень гибкие, потому что в них можно добавлять, удалять и изменять значения. Когда вам нужно хранить много значений или перебирать значения, и вы хотите иметь возможность легко изменять эти значения, вероятно, вам захочется работать с типами данных списков.
В этом руководстве мы рассмотрим некоторые способы работы со списками в Python.
Индексация списков
Каждый элемент в списке соответствует номеру индекса, который является целым числом, начиная с номера индекса 0
.
Для списка sea_creatures
разбиение по индексу выглядит так:
‘shark’ | ‘cuttlefish’ | ‘squid’ | ‘mantis shrimp’ | ‘anemone’ |
---|---|---|---|---|
0 | 1 | 2 | 3 | 4 |
Первый элемент, строка 'shark'
, начинается с индекса 0
, и список заканчивается на индексе 4
с элементом 'anemone'
.
Поскольку каждый элемент в списке Python имеет соответствующий номер индекса, мы можем получать доступ к спискам и управлять ими так же, как и другими последовательными типами данных.
Теперь мы можем вызвать отдельный элемент списка, обратившись к его номеру индекса:
Outputcuttlefish
Номера индексов для этого списка диапазон от 0
до 4
, как показано в таблице выше. Таким образом, чтобы вызвать любой из элементов индивидуально, мы бы обращались к номерам индексов таким образом:
Если мы вызовем список sea_creatures
с номером индекса больше 4, это будет вне диапазона, поскольку он не будет действителен:
OutputIndexError: list index out of range
Помимо положительных номеров индексов, мы также можем получить доступ к элементам списка с отрицательным номером индекса, отсчитывая их с конца списка, начиная с -1
. Это особенно полезно, если у нас есть длинный список, и мы хотим указать на элемент к концу списка.
Для того же списка sea_creatures
отрицательный разбор индексов выглядит следующим образом:
‘shark’ | ‘cuttlefish’ | ‘squid’ | ‘mantis shrimp’ | ‘anemone’ |
---|---|---|---|---|
-5 | -4 | -3 | -2 | -1 |
Таким образом, если мы хотим вывести элемент 'squid'
, используя его отрицательный номер индекса, мы можем сделать это так:
Outputsquid
Мы можем конкатенировать строковые элементы в списке с другими строками, используя оператор +
:
OutputSammy is a shark
Мы смогли объединить строковый элемент по индексу номер 0
со строкой 'Сэмми - '
. Мы также можем использовать оператор +
для конкатенации двух или более списков вместе.
С помощью номеров индексов, соответствующих элементам в списке, мы можем получить доступ к каждому элементу списка отдельно и работать с этими элементами.
Изменение элементов в списках
Мы можем использовать индексирование для изменения элементов в списке, устанавливая номер индекса равным другому значению. Это дает нам больший контроль над списками, поскольку мы можем изменять и обновлять элементы, которые они содержат.
Если мы хотим изменить строковое значение элемента с индексом 1
с 'чернильная рыба'
на 'осьминог'
, мы можем сделать это так:
Теперь, когда мы распечатаем морские существа
, список будет отличаться:
Output['shark', 'octopus', 'squid', 'mantis shrimp', 'anemone']
Мы также можем изменить значение элемента, используя отрицательный номер индекса:
Output['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone']
Теперь 'пузырепод'
заменил 'кальмар'
на отрицательном номере индекса -3
(который соответствует положительному номеру индекса 2
).
Способность изменять элементы в списках дает нам возможность изменять и обновлять списки эффективным способом.
Разделение списков
Мы также можем выбрать несколько элементов из списка. Допустим, мы хотим вывести только средние элементы из sea_creatures
, мы можем сделать это, создав срез. С помощью срезов мы можем вызвать несколько значений, создав диапазон индексов, разделенных двоеточием [x:y]
:
Output['octopus', 'blobfish', 'mantis shrimp']
При создании среза, как в [1:4]
, первое число индекса – это место начала среза (включительно), а второе число индекса – это место окончания среза (исключительно), поэтому в нашем примере выше элементы на позиции, 1
, 2
и 3
выводятся.
Если мы хотим включить один из концов списка, мы можем опустить одно из чисел в синтаксисе list[x:y]
. Например, если мы хотим вывести первые 3 элемента списка sea_creatures
– которые будут 'shark'
, 'octopus'
, 'blobfish'
– мы можем сделать это, набрав:
Output['shark', 'octopus', 'blobfish']
Это вывело начало списка, останавливаясь прямо перед индексом 3
.
Чтобы включить все элементы в конце списка, мы бы изменили синтаксис:
Output['blobfish', 'mantis shrimp', 'anemone']
Мы также можем использовать отрицательные числовые индексы при разделении списков, аналогично положительным числовым индексам:
Output['octopus', 'blobfish']
['blobfish', 'mantis shrimp', 'anemone']
Один последний параметр, который мы можем использовать срезанием, называется stride, который относится к тому, сколько элементов двигаться вперед после того, как первый элемент извлечен из списка. До сих пор мы опускали параметр шага, и Python по умолчанию устанавливает шаг равным 1, так что между двумя номерами индексов извлекаются все элементы.
Синтаксис этой конструкции выглядит так: list[x:y:z]
, где z
относится к шагу. Давайте создадим более крупный список, затем нарежем его и установим шаг в значение 2:
Output[1, 3, 5, 7, 9]
Наша конструкция numbers[1:11:2]
выводит значения между индексными номерами включительно от 1
и исключительно до 11
, затем значение шага 2
указывает программе выводить только каждый второй элемент.
Мы можем опустить первые два параметра и использовать только шаг в качестве параметра синтаксиса list[::z]
:
Output[0, 3, 6, 9, 12]
Вывод списка numbers
с шагом, установленным на 3
, позволяет выводить только каждый третий элемент:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
Срезание списков с положительными и отрицательными индексными номерами и указание шага позволяет нам контролировать списки и получать нужный нам вывод.
Изменение списков с помощью операторов
Операторы можно использовать для внесения изменений в списки. Мы рассмотрим использование операторов +
и *
, а также их составные формы +=
и *=
.
Оператор +
можно использовать для объединения двух или более списков:
Output['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']
Поскольку оператор +
может выполнять объединение, его можно использовать для добавления элемента (или нескольких) в виде списка в конец другого списка. Не забудьте поместить элемент в квадратные скобки:
Output['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']
Оператор *
можно использовать для умножения списков. Возможно, вам нужно сделать копии всех файлов в каталоге на сервере или поделиться плейлистом с друзьями – в этих случаях вам потребуется умножить коллекции данных.
Давайте умножим список sea_creatures
на 2 и список oceans
на 3:
Output['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.
Output['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']
На каждой итерации цикла for в исходный список sea_creatures добавляется дополнительный элемент списка ‘fish’.
Оператор *= ведет себя аналогичным образом:
Output['shark', 'shark']
['shark', 'shark', 'shark', 'shark']
['shark', 'shark', 'shark', 'shark', 'shark', 'shark', 'shark', 'shark']
Операторы + и * могут использоваться для конкатенации списков и умножения списков. Составные операторы += и *= могут конкатенировать списки и умножать списки, передавая новую идентичность исходному списку.
Удаление элемента из списка
Элементы можно удалять из списков с помощью оператора del. Это удалит значение по указанному вами номеру индекса в списке.
Из списка sea_creatures давайте удалим элемент ‘octopus’. Этот элемент находится на позиции индекса 1. Чтобы удалить элемент, мы будем использовать оператор del, затем вызовем переменную списка и номер индекса этого элемента:
Output['shark', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']
Теперь элемент на позиции индекса 1, строка ‘octopus’, больше не находится в нашем списке sea_creatures.
Мы также можем указать диапазон с оператором del. Скажем, мы хотели бы удалить не только элемент ‘octopus’, но также ‘blobfish’ и ‘mantis shrimp’. Мы можем вызвать диапазон в sea_creatures с оператором del, чтобы выполнить это:
Output['shark', 'anemone', 'yeti crab']
Используя диапазон с оператором del
, мы смогли удалить элементы между индексами 1
(включительно) и 4
(исключительно), оставив список из 3 элементов после удаления 3 элементов.
Оператор del
позволяет удалять определенные элементы из типа данных списка.
Создание списка с элементами списка
Списки могут быть определены с элементами, состоящими из списков, причем каждый списочный список заключен внутри больших скобок родительского списка:
Эти списки внутри списков называются вложенными списками.
Для доступа к элементу в этом списке нам придется использовать несколько индексов:
OutputSammy
shark
Первый список, так как он равен элементу, будет иметь индексное число 0, которое будет первым числом в конструкции, и второй список будет иметь индексное число 1. В каждом внутреннем вложенном списке будут отдельные индексные номера, которые мы будем вызывать во втором индексном номере:
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] = 'Sammy'
sea_names[1][1] = 'Jesse'
sea_names[1][2] = 'Drew'
sea_names[1][3] = 'Jamie'
При работе со списками списков важно помнить, что вам потребуется обращаться к более чем одному индексному номеру, чтобы получить доступ к определенным элементам в соответствующем вложенном списке.
Заключение
Тип данных “список” является гибким типом данных, который может быть изменен в течение работы вашей программы. В этом учебнике рассматриваются основные особенности списков, включая индексацию, нарезку, модификацию и объединение списков.
Отсюда вы можете узнать больше о работе со списками в Python, прочитав “Как использовать методы списка”, и о включениях списка для создания списков на основе существующих списков. Чтобы узнать больше о типах данных в целом, вы можете прочитать наш учебник “Понимание типов данных”.
Source:
https://www.digitalocean.com/community/tutorials/understanding-lists-in-python-3