Вступление
list - это структура данных в Python, которая представляет собой изменяемую или изменяемую упорядоченную последовательность элементов. Каждый элемент или значение, которое находится внутри списка, называется элементом. Так же, какstrings определяются как символы в кавычках, списки определяются с помощью значений в квадратных скобках[ ]
.
Списки прекрасно подходят для работы со многими связанными значениями. Они позволяют вам объединять данные, которые принадлежат друг другу, сокращать код и выполнять одни и те же методы и операции с несколькими значениями одновременно.
Размышляя о списках Python и других структурах данных, которые являются типами коллекций, полезно рассмотреть все различные коллекции, которые у вас есть на вашем компьютере: ваш ассортимент файлов, списки воспроизведения песен, закладки браузера, ваши электронные письма, коллекция видео Вы можете получить доступ к потоковой службе и многое другое.
Для начала давайте создадим список, содержащий элементы типа данных string:
sea_creatures = ['shark', 'cuttlefish', 'squid', 'mantis shrimp', 'anemone']
Когда мы распечатываем список, вывод выглядит точно так же, как список, который мы создали:
print(sea_creatures)
Output['shark', 'cuttlefish', 'squid', 'mantis shrimp', 'anemone']
Как упорядоченная последовательность элементов, каждый элемент в списке может быть вызван индивидуально, посредством индексации. Списки являются составным типом данных, состоящим из более мелких частей, и являются очень гибкими, поскольку могут иметь значения, добавляемые, удаляемые и изменяемые. Когда вам нужно сохранить много значений или выполнить итерацию по значениям, и вы хотите иметь возможность легко изменять эти значения, вы, вероятно, захотите работать со списком типов данных.
В этом руководстве мы рассмотрим некоторые способы работы со списками в Python.
Списки индексации
Каждому элементу в списке соответствует порядковый номер, который является целым числом, начиная с порядкового номера0
.
Для спискаsea_creatures
разбивка индекса выглядит так:
'акула' | "каракатица" | 'Кальмар' | креветка-богомол | 'анемон' |
---|---|---|---|---|
0 |
1 |
2 |
3 |
4 |
Первый элемент, строка'shark'
, начинается с индекса0
, а список заканчивается индексом4
с элементом'anemone'
.
Поскольку каждый элемент в списке Python имеет соответствующий порядковый номер, мы можем получать доступ к спискам и манипулировать ими так же, как и с другими последовательными типами данных.
Теперь мы можем вызвать отдельный элемент списка, ссылаясь на его порядковый номер:
print(sea_creatures[1])
Outputcuttlefish
Номера индексов для этого списка варьируются от0
до4
, как показано в таблице выше. Таким образом, чтобы вызывать любой из пунктов по отдельности, мы будем ссылаться на номера индексов, как это:
sea_creatures[0] = 'shark'
sea_creatures[1] = 'cuttlefish'
sea_creatures[2] = 'squid'
sea_creatures[3] = 'mantis shrimp'
sea_creatures[4] = 'anemone'
Если мы вызовем списокsea_creatures
с любым номером индекса, который больше 4, он выйдет за пределы допустимого диапазона, поскольку он не будет действительным:
print(sea_creatures[18])
OutputIndexError: list index out of range
В дополнение к положительным номерам индексов мы также можем получить доступ к элементам из списка с отрицательными номерами индексов, считая в обратном порядке от конца списка, начиная с-1
. Это особенно полезно, если у нас длинный список, и мы хотим точно указать элемент в конце списка.
Для того же спискаsea_creatures
разбивка отрицательного индекса выглядит так:
'акула' | "каракатица" | 'Кальмар' | креветка-богомол | 'анемон' |
---|---|---|---|---|
-5 |
-4 |
-3 |
-2 |
-1 |
Итак, если мы хотим распечатать элемент'squid'
, используя его отрицательный порядковый номер, мы можем сделать это следующим образом:
print(sea_creatures[-3])
Outputsquid
Мы можем объединить строковые элементы в списке с другими строками с помощью оператора+
:
print('Sammy is a ' + sea_creatures[0])
OutputSammy is a shark
Нам удалось объединить строковый элемент с номером индекса0
со строкой'Sammy is a '
. Мы также можем использовать оператор+
дляconcatenate 2 or more lists together.
С индексами, которые соответствуют элементам в списке, мы можем получить доступ к каждому элементу списка дискретно и работать с этими элементами.
Изменение элементов в списках
Мы можем использовать индексирование для изменения элементов в списке, установив индексный номер, равный другому значению. Это дает нам больший контроль над списками, так как мы можем изменять и обновлять элементы, которые они содержат.
Если мы хотим изменить строковое значение элемента с индексом1
с'cuttlefish'
на'octopus'
, мы можем сделать это следующим образом:
sea_creatures[1] = 'octopus'
Теперь, когда мы печатаемsea_creatures
, список будет другим:
print(sea_creatures)
Output['shark', 'octopus', 'squid', 'mantis shrimp', 'anemone']
Мы также можем изменить значение элемента, используя вместо этого отрицательный индекс:
sea_creatures[-3] = 'blobfish'
print(sea_creatures)
Output['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone']
Теперь'blobfish'
заменил'squid'
на отрицательный номер индекса-3
(который соответствует положительному номеру индекса2
).
Возможность изменять элементы в списках дает нам возможность изменять и обновлять списки эффективным способом.
Списки нарезки
Мы также можем вызвать несколько пунктов из списка. Допустим, мы хотим просто распечатать средние элементыsea_creatures
, мы можем сделать это, создавslice. С помощью срезов мы можем вызывать несколько значений, создавая диапазон номеров индексов, разделенных двоеточием[x:y]
:
print(sea_creatures[1:4])
Output['octopus', 'blobfish', 'mantis shrimp']
При создании среза, как в[1:4]
, первый номер индекса - это место, где начинается срез (включительно), а второй номер индекса - это место, где заканчивается срез (исключая), поэтому в нашем примере выше элементы в position,1
,2
и3
- элементы, которые распечатываются.
Если мы хотим включить любой конец списка, мы можем опустить одно из чисел в синтаксисеlist[x:y]
. Например, если мы хотим напечатать первые 3 элемента спискаsea_creatures
- это будет'shark'
,'octopus'
,'blobfish'
- мы можем сделать это, набрав:
print(sea_creatures[:3])
Output['shark', 'octopus', 'blobfish']
Это напечатало начало списка, остановившись прямо перед индексом3
.
Чтобы включить все элементы в конец списка, мы изменили бы синтаксис:
print(sea_creatures[2:])
Output['blobfish', 'mantis shrimp', 'anemone']
Мы также можем использовать отрицательные номера индексов при нарезке списков, как и с положительными номерами индексов:
print(sea_creatures[-4:-2])
print(sea_creatures[-3:])
Output['octopus', 'blobfish']
['blobfish', 'mantis shrimp', 'anemone']
Последний параметр, который мы можем использовать с нарезкой, называетсяstride, который указывает, сколько элементов нужно продвинуть вперед после того, как первый элемент будет извлечен из списка. До сих пор мы опускали параметр шага, и Python по умолчанию принимает значение шага 1, так что каждый элемент между двумя индексными номерами извлекается.
Синтаксис этой конструкции -list[x:y:z]
, гдеz
относится к шагу. Давайте составим больший список, затем нарежем его и дадим шагу значение 2:
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
print(numbers[1:11:2])
Output[1, 3, 5, 7, 9]
Наша конструкцияnumbers[1:11:2]
печатает значения между номерами индексов, включая1
и исключая11
, затем значение шага2
указывает программе распечатать только все остальные элементы.
Мы можем опустить первые два параметра и использовать только шаг в качестве параметра с синтаксисомlist[::z]
:
print(numbers[::3])
Output[0, 3, 6, 9, 12]
При распечатке спискаnumbers
с шагом, установленным на3
, печатается только каждый третий элемент:
0, 1, 2,3, 4, 5,6, 7, 8,9, 10, 11,12
Нарезка списков как с положительными, так и с отрицательными номерами индексов и указание шага дает нам возможность управлять списками и получать результаты, которые мы пытаемся достичь.
Изменение списков с помощью операторов
Операторы могут использоваться для внесения изменений в списки. Мы рассмотрим использование+` and `+*+` operators and their compound forms `=+
и*=
.
Оператор+
может использоваться для объединения двух или более списков вместе:
sea_creatures = ['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone']
oceans = ['Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']
print(sea_creatures + oceans)
Output['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']
Поскольку оператор+
может объединяться, его можно использовать для добавления элемента (или нескольких) в форме списка в конец другого списка. Не забудьте поместить элемент в квадратные скобки:
sea_creatures = sea_creatures + ['yeti crab']
print (sea_creatures)
Output['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']
Оператор*
может использоваться для умножения списков. Возможно, вам нужно сделать копии всех файлов в каталоге на сервере или поделиться списком воспроизведения с друзьями - в этих случаях вам нужно будет умножить сбор данных.
Давайте умножим списокsea_creatures
на 2, а списокoceans
на 3:
print(sea_creatures * 2)
print(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']
Используя оператор*
, мы можем реплицировать наши списки указанное количество раз.
Мы также можем использовать составные формы составных операторов+` and `+*+` operators with the assignment operator `+=+`. The `=+
и*=
, которые можно использовать для быстрого и автоматического заполнения списков. Вы можете использовать эти операторы для заполнения списков заполнителями, которые вы можете изменить позже, например, с помощью предоставленного пользователем ввода.
Давайте добавим элемент в виде списка в списокsea_creatures
. Этот элемент будет действовать как заполнитель, и мы хотели бы добавить этот элемент заполнителя несколько раз. Для этого мы будем использовать оператор+=
сfor loop.
for x in range(1,4):
sea_creatures += ['fish']
print(sea_creatures)
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'
.
Оператор*=
ведет себя аналогичным образом:
sharks = ['shark']
for x in range(1,4):
sharks *= 2
print(sharks)
Output['shark', 'shark']
['shark', 'shark', 'shark', 'shark']
['shark', 'shark', 'shark', 'shark', 'shark', 'shark', 'shark', 'shark']
Операторы+` and `+*+` can be used to concatenate lists and multiply lists. The compound operators `=+
и*=
могут объединять списки и умножать списки и передавать новый идентификатор в исходный список.
Удаление элемента из списка
Элементы могут быть удалены из списков с помощью оператораdel
. Это приведет к удалению значения по индексу, указанному вами в списке.
Из спискаsea_creatures
удалим элемент'octopus'
. Этот элемент находится в позиции индекса1
. Чтобы удалить элемент, мы воспользуемся операторомdel
, затем вызовем переменную списка и порядковый номер этого элемента:
sea_creatures =['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']
del sea_creatures[1]
print(sea_creatures)
Output['shark', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']
Теперь элемент в позиции индекса1
, строка'octopus'
, больше не находится в нашем спискеsea_creatures
.
Мы также можем указать диапазон с помощью оператораdel
. Скажем, мы хотели удалить не только элемент'octopus'
, но также'blobfish'
и'mantis shrimp'
. Для этого мы можем вызвать диапазон вsea_creatures
с помощью оператораdel
:
sea_creatures =['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']
del sea_creatures[1:4]
print(sea_creatures)
Output['shark', 'anemone', 'yeti crab']
Используя диапазон с операторомdel
, мы смогли удалить элементы между номером индекса1
(включительно) и номером индекса4
(исключая), оставив нас со списком из 3 пунктов после удаления 3 пунктов.
Операторdel
позволяет нам удалять определенные элементы из типа данных списка.
Построение списка с элементами списка
Списки могут быть определены с элементами, которые составлены из списков, с каждым заключенным в квадратные скобки списком в больших скобках родительского списка:
sea_names = [[shark', 'octopus', 'squid', 'mantis shrimp'],['Sammy', 'Jesse', 'Drew', 'Jamie']]
Эти списки в списках называются вложенными списками.
Чтобы получить доступ к элементу в этом списке, нам нужно будет использовать несколько индексов:
print(sea_names[1][0])
print(sea_names[0][0])
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, прочитав «https://www.digitalocean.com/community/tutorials/how-to-use-list-methods-in-python-3[Как использовать List Methods] »и околоlist comprehensions для создания списков на основе существующих списков. Чтобы узнать больше о типах данных в целом, вы можете прочитать наш учебник «https://www.digitalocean.com/community/tutorials/understanding-data-types-in-python-3[Understanding Types Data]».