Поиск по сайту:

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


Введение

Список — это структура данных в Python, представляющая собой изменяемую или изменяемую упорядоченную последовательность элементов. Каждый элемент или значение, находящееся внутри списка, называется элементом. Точно так же, как строки определяются как символы в кавычках, списки определяются с помощью значений, заключенных в квадратные скобки [ ].

Списки отлично подходят для работы со многими связанными значениями. Они позволяют хранить вместе данные, которые принадлежат друг другу, сокращать код и выполнять одни и те же методы и операции над несколькими значениями одновременно.

Размышляя о списках Python и других структурах данных, которые являются типами коллекций, полезно учитывать все различные коллекции, которые есть на вашем компьютере: набор файлов, списки воспроизведения песен, закладки браузера, электронные письма, коллекцию видео. вы можете получить доступ к потоковому сервису и многое другое.

Предпосылки

У вас должен быть установлен Python 3 и настроена среда программирования на вашем компьютере или сервере. Если у вас не настроена среда программирования, вы можете обратиться к руководствам по установке и настройке среды программирования на вашем сервере, подходящей для вашей операционной системы (Ubuntu, CentOS, Debian и т. д.).

Списки строк

Для начала создадим список, содержащий элементы строкового типа данных:

Информация: Чтобы следовать примеру кода в этом руководстве, откройте интерактивную оболочку Python в вашей локальной системе, выполнив команду python3. Затем вы можете копировать, вставлять или редактировать примеры, добавляя их после приглашения >>>.

sea_creatures = ['shark', 'cuttlefish', 'squid', 'mantis shrimp', 'anemone']

Когда мы распечатываем список, вывод отвечает точно так же, как список, который мы создали:

print(sea_creatures)
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 элементом анемон.

Поскольку каждый элемент в списке Python имеет соответствующий порядковый номер, мы можем обращаться к спискам и манипулировать ими так же, как и с другими последовательными типами данных.

Теперь мы можем вызвать дискретный элемент списка, обратившись к его порядковому номеру:

print(sea_creatures[1])
Output
cuttlefish

Номера индексов для этого списка находятся в диапазоне от 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])
Output
IndexError: list index out of range

В дополнение к положительным порядковым номерам мы также можем получить доступ к элементам из списка с отрицательным порядковым номером, считая в обратном порядке от конца списка, начиная с -1. Это особенно полезно, если у нас есть длинный список, и мы хотим выделить элемент ближе к концу списка.

Для того же списка sea_creatures разбивка отрицательного индекса выглядит следующим образом:

‘shark’ ‘cuttlefish’ ‘squid’ ‘mantis shrimp’ ‘anemone’
-5 -4 -3 -2 -1

Итак, если мы хотим распечатать элемент squid, используя его отрицательный порядковый номер, мы можем сделать это следующим образом:

print(sea_creatures[-3])
Output
squid

Мы можем объединить строковые элементы в списке с другими строками, используя оператор +:

print('Sammy is a ' + sea_creatures[0])
Output
Sammy is a shark

Нам удалось соединить элемент строки с порядковым номером 0 со строкой Sammy is a . Мы также можем использовать оператор + для объединения 2 или более списков вместе.

С номерами индексов, которые соответствуют элементам в списке, мы можем получить доступ к каждому элементу списка дискретно и работать с этими элементами.

Изменение элементов в списках

Мы можем использовать индексацию для изменения элементов в списке, установив номер индекса, равный другому значению. Это дает нам больший контроль над списками, поскольку мы можем изменять и обновлять содержащиеся в них элементы.

Если мы хотим изменить строковое значение элемента с индексом 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, мы можем сделать это, создав срез. С помощью срезов мы можем вызывать несколько значений, создавая диапазон номеров индексов, разделенных двоеточием [x:y]:

print(sea_creatures[1:4])
Output
['octopus', 'blobfish', 'mantis shrimp']

При создании фрагмента, как в [1:4], первый номер индекса — это место, где начинается фрагмент (включительно), а второй номер индекса — это место, где фрагмент заканчивается (исключая), поэтому в нашем примере выше элементы в позиции 1, 2 и 3 — это элементы, которые распечатываются.

Если мы хотим включить любой конец списка, мы можем опустить одно из чисел в синтаксисе list[x:y]. Например, если мы хотим напечатать первые 3 элемента списка sea_creatures — это будут акула, осьминог, 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']

Последний параметр, который мы можем использовать при нарезке, называется шагом и указывает, сколько элементов нужно продвинуть вперед после того, как первый элемент будет извлечен из списка. До сих пор мы опускали параметр шага, и 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

Нарезка списков как с положительными, так и с отрицательными порядковыми номерами и указанием шага дает нам возможность управлять списками и получать результат, которого мы пытаемся достичь.

Изменение списков с помощью операторов

Операторы могут использоваться для внесения изменений в списки. Мы рассмотрим использование операторов + и * и их составных форм += и *=.

Оператор + можно использовать для объединения двух или более списков вместе:

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']

Используя оператор *, мы можем реплицировать наши списки указанное количество раз.

Мы также можем использовать составные формы операторов + и * с оператором присваивания =. Составные операторы += и *= можно использовать для быстрого и автоматизированного заполнения списков. Вы можете использовать эти операторы для заполнения списков заполнителями, которые вы можете изменить позже, например, с помощью пользовательского ввода.

Давайте добавим элемент в виде списка в список sea_creatures. Этот элемент будет выступать в качестве заполнителя, и мы хотели бы добавить этот элемент-заполнитель несколько раз. Для этого мы будем использовать оператор += с циклом for.

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']

Операторы + и * можно использовать для объединения списков и умножения списков. Составные операторы += и *= могут объединять списки и умножать списки и передавать новое удостоверение исходному списку.

Удаление элемента из списка

Элементы можно удалять из списков с помощью оператора 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. Допустим, мы хотим удалить не только элемент осьминог, но также рыба-капля и креветка-богомол. Мы можем вызвать диапазон в 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])
Output
Sammy 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, прочитав учебник «Понимание типов данных».