Понимание списков в Python 3

Вступление

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]».