Python списки: Полный обзор
В этом уроке вы узнаете все, что нужно для начала работы со списками в Python. Вы узнаете, что такое списки и как их можно использовать для хранения данных. Вы также узнаете, как получать доступ к данным в списках с помощью срезов и индексов. Вы узнаете, как добавлять данные в списки и как удалять элементы. Вы также научитесь создавать списки списков, которые часто могут использоваться для представления матриц данных.
Содержание
Что такое списки Python
Списки в Python — это тип коллекции данных, что означает, что мы можем использовать их как контейнеры для других значений. Одно из замечательных свойств Python — это простота именования элементов. Представьте себе списки именно как списки. Списки в реальной жизни могут содержать элементы разных типов и могут даже содержать повторяющиеся элементы.
Давайте рассмотрим некоторые ключевые свойства списков в Python:
Упорядоченный
Python-списки - это не просто набор объектов, а упорядоченный набор объектов. Это означает, что заданный порядок имеет значение. Пока порядок явно не изменен, он остается тем же.
Индексируемый
Мы можем получить доступ к элементам списка Python, используя их индекс. Поскольку списки упорядочены, индекс остаётся прежним (если мы его явно не изменим).
Изменяемый
Мы можем изменять списки, применяя различные функции или методы к спискам. Это может включать сортировку значений по-разному (например, от меньшего к большему) или фильтрацию значений списка на основе условия.
Разнородный
Python списки могут содержать различные типы объектов. Например, вы можете создать список, который содержит информацию о разных людях, таких как их имя (строка), возраст (целое число), регистрация (логическое значение) и многое другое!
Теперь, когда вы знаете, что такое списки в Python, давайте посмотрим, как их можно создать.
Создание списков в Python
Давайте теперь посмотрим, как мы можем создавать списки в Python. Чтобы создать пустой список, у вас есть два разных варианта:
Использование функции
list()
Using empty square brackets,
[]
Давайте посмотрим, как это выглядит:
Мы также можем создавать списки с данными. Для этого давайте использовать квадратные скобки и просто включать в них данные. Так как списки являются гетерогенными, мы можем включать различные типы данных.
Создадим непустой список:
Здесь мы создали список, который содержит три элемента. Иногда ваши списки могут быть длиннее, и вам захочется разбить их на несколько строк. Стилистически их можно будет отступить, как показано ниже:
Оба этих списка абсолютно одинаковы. Если бы наш список был шире или длиннее, второй вариант был бы, безусловно, легче для чтения.
Проверка типа списка
Если вы не уверены в типе вашего объекта, вы можете использовать встроенную функцию type(), чтобы проверить тип объекта. Давайте передадим одну из наших списков в функцию и посмотрим, что она вернёт:
Возвращает следующее: <class 'list'>
В следующем разделе вы узнаете, как получать доступ к данным в списках Python.
Доступ к данным в списках Python
Можно получить доступ к элементам списка Python различными способами. Помните, что списки Python индексируются и упорядочены. Это означает, что мы можем получить доступ к элементам на основе порядка их появления (т.е. их индексной позиции).
Индексы списков Python начинаются с 0
, что означает, что они стартуют с значения 0 и заканчиваются значением длины списка минус 1. Также индексация может идти с конца. Последний элемент имеет индекс -1 и продолжается до отрицательного значения длины списка.
Давайте загрузим список, чтобы увидеть, как индексы списка представляют различные значения:
Хотя кажется противоинтуитивным, что отрицательные индексы должны начинаться с -1, стоит представить индексы как границы между различными элементами списка.
Использование индекса списка для доступа к элементу
Посмотрим, как мы можем использовать индекс, как положительный, так и отрицательный, чтобы получить доступ к элементам списка. Помните, что первый элемент будет иметь индекс 0, а последний элемент будет иметь отрицательный индекс -1
Давайте посмотрим, как мы можем использовать наш список для доступа к первому и последнему элементам в наших списках:
Поскольку списки являются изменяемыми (что значит, их можно менять), использование отрицательных индексов может быть особенно полезным. Так как длина нашего списка может изменяться, вам не нужно сначала знать, какова длина вашего списка, чтобы получить доступ к последнему элементу.
Теперь, как вы думаете, что произойдет, когда мы попробуем написать код ниже?
Проверьте решение ниже
IndexError: list index out of range
Хотя интуитивно мы можем думать, что это вернет последний элемент 'f'
, Python на самом деле вызывает IndexError
. Это происходит потому, что списки в Python индексируются с нуля. Технически, последний элемент в нашем списке находится на позиции индекса 5. Это можно вычислить, сначала найдя длину списка (6) и вычитая 1 из нее.
Могут быть случаи, когда вам нужно выбрать более одного элемента в вашем списке. Допустим, вы хотите выделить определенную часть списка – этому вы научитесь в следующем разделе.
Нарезка списков Python для доступа к нескольким элементам
Давайте посмотрим, как можно получить доступ ко второму, третьему и четвертому элементам в нашем списке: Списки Python также можно разрезать, что означает, что мы можем легко получить доступ к части списка. Мы указываем начальную и конечную позиции индексов внутри квадратных скобок, разделенных двоеточием.
Вот пара вещей, на которые стоит обратить внимание:
Возвращаемый срез также является списком
Параметр окончания является не включающим, то есть он включает все элементы до, но не включая элемент с этим индексом.
Мы также можем опустить начальную или конечную (или обе) позиции среза. Это возвращает все значения с одного конца (или обоих концов). Это особенно полезно, когда мы не знаем, насколько длинен список, но хотим включить все до конца. Аналогично, мы можем комбинировать отрицательную индексацию с нашими срезами.
Проверьте своё понимание: Выполните упражнения ниже, чтобы проверить свои знания о том, какие элементы будут включены в срез. Помните, что наш список выглядит так: letters = ['a', 'b', 'c', 'd', 'e', 'f']
['a', 'b', 'c', 'd', 'e', 'f']
['a', 'b', 'c', 'd', 'e', 'f']
['e', 'f']
['e', 'f']
['c', 'd', 'e']
['c', 'd', 'e']
['b', 'c', 'd']
['b', 'c', 'd']
Теперь, когда у вас есть четкое понимание того, как можно обращаться к элементам списка, давайте посмотрим, как можно изменять элементы списка.
Изменение Элементов Списка в Python
Знание того, как обращаться к элементам списка, позволяет нам легко их изменять. Мы можем просто присвоить новое значение индексу элемента списка, и элемент в этой позиции будет изменен. Поскольку списки в Python являются гетерогенными (то есть могут содержать разные типы данных), нам не нужно беспокоиться о типе данных, который мы присваиваем.
Давайте посмотрим, как мы можем изменить первый элемент нашего предыдущего списка:
Мы можем увидеть, как легко было изменить элемент списка.
Аналогично, мы также можем изменить срез списка, передав другой список элементов:
Что, по вашему мнению, произойдет, когда мы попытаемся написать следующий код?
Это приведет к следующему:
Python вызывает IndexError
, так как в нашем списке нет позиции 6. Хотя это может показаться интуитивным способом добавления элементов в список, на самом деле Python не может обработать это.
В следующем разделе вы узнаете, как проверить наличие элемента в списке.
Проверка наличия элемента в списке Python
Много раз вам просто нужно узнать, существует ли элемент в списке. Для этого мы можем использовать ключевое слово in
. Буквально, это ключевое слово оценивает, существует ли элемент в списке или нет. Это одно из больших преимуществ Python – его акцент на читаемость.
Использование этого ключевого слова вернет логическое значение:
Если элемент существует, выражение будет оценено как
True
Если элемент не существует, выражение будет оцениваться как
False
Давайте проверим, существует ли строка 'a'
в нашем списке:
Здесь мы видим, что наш код вернул True
, поскольку строка существует в нашем списке. Аналогично, мы можем подтвердить, что строка 'datagy'
не существует в нашем списке:
В следующем разделе вы узнаете некоторые способы добавления элементов в список Python.
Добавление элементов в списки Python
Поскольку списки Python по своей сути являются коллекциями данных, мы часто будем использовать их для хранения данных. Одна из самых распространенных операций - добавление элементов в списки Python. В то время как в предыдущем разделе вы узнали, как изменять элементы в списке, в этом разделе вы узнаете, как добавлять элементы в список.
В Python есть метод списка .append()
, который позволяет добавлять элементы в список.
Давайте посмотрим, как мы можем добавить строку 'g'
в наш предыдущий список:
Важно отметить, что метод .append()
изменяет список на месте. Это означает, что, так как наш список изменяемый, нам не нужно присваивать его новой переменной для использования.
Мы можем даже добавить несколько элементов в список! Давайте посмотрим, что произойдет, когда мы используем метод .append()
для добавления списка элементов в другой список:
Мы видим, что это не совсем то, что мы хотели! Весь список был вставлен как элемент списка. Вы узнаете больше о списках списков позже в этом уроке. Метод .append()
принимает только один аргумент, и весь аргумент добавляется как единое целое.
Чтобы добавить несколько элементов одновременно в список Python, мы можем использовать метод .extend()
. Этот метод добавляет все элементы итерируемого объекта (например, списка) в конец другого списка. Давайте повторим наш предыдущий пример с этим новым методом!
Это сработало гораздо лучше и дало нам результат, на который мы надеялись!
Удаление элементов из списков Python
Теперь, когда вы знаете, как добавлять элементы в список, давайте посмотрим, как с помощью Python можно удалить элементы из списка. Существует множество способов, с помощью которых можно удалить элементы из списка.
Например, вы можете захотеть удалить просто второй элемент списка (т.е. по позиции) или удалить конкретный элемент (т.е. по значению). Хотя существует множество дополнительных способов удаления элементов из списка, давайте начнем с этих.
Удаление элементов из списка по индексу
Знание того, как удалить элемент из списка, используя его индекс, является важным навыком. Например, вы можете знать, что хотите удалить второй элемент из списка. Для этого можно использовать метод .pop()
Метод .pop()
принимает один аргумент — индекс элемента, который вы хотите удалить. Более того, он возвращает этот элемент, что может быть весьма удобно, если вы хотите воспользоваться удаленным объектом. Это особенно полезно при создании игр.
Давайте рассмотрим, как использовать этот метод для удаления второго элемента в нашем списке:
Мы видим, что с помощью метода .pop()
можно удалить элемент из списка по его позиции.
Удаление элемента из списка Python по его значению
Аналогично, мы можем удалить элемент из списка в Python по его значению. Для этого можно использовать метод .remove()
. Как и метод .pop()
, этот метод принимает только один аргумент: значение, которое мы хотим удалить. В отличие от метода .pop()
, этот метод не возвращает ничего.
Посмотрим, как мы можем использовать Python для удаления строки 'c'
из нашего списка:
Здесь мы видим, что наш список был успешно изменен, и строка 'c'
была удалена. Посмотрите на код ниже и попробуйте угадать, что произойдет:
ответ
Если элемент отсутствует в нашем списке и мы пытаемся его удалить, Python вызовет ValueError
. Это приведет к завершению нашей программы и все последующее кодирование не будет выполнено.
Одним из важных моментов является то, что метод удаляет только первый экземпляр этого элемента в нашем списке. Один из способов обойти это - просто вызвать метод несколько раз. Однако, как вы видели в приведенном выше примере, наш код выйдет из строя, если элемент не существует – так что будьте осторожны!
Итерация по спискам в Python
Может случиться так, что вам нужно будет повторять (или проходить) элементы списка. Python делает это очень легко для написания (и чтения). Мы можем просто попросить Python сделать что-то "для" каждого элемента "в" нашем списке. Скажем, мы хотим распечатать каждую строку в нашем списке letters
, мы можем просто написать следующее:
Это было легко! Одно из замечательных качеств Python заключается в том, насколько он похож на английский язык. Сразу понятно, что мы хотим сделать.
Следует отметить, что использование итератора letter
является полностью необязательным. Мы можем назвать его как угодно. Например, написание кода ниже даст тот же результат:
Что-то, что может показаться незначительным при написании кода, это выбор имен переменных. Важно стремиться к читаемости вашего кода. Поэтому выбор letter
вероятно имеет больше смысла, чем goobledygook
!
Вы узнаете больше о циклах for в Python в следующем уроке, но я хотел включить краткий обзор их применения к спискам здесь для полноты картины. В следующем разделе вы узнаете о списковых включениях в Python.
Генераторы списков в Python
Python-списки — это более продвинутая тема. Вкратце, списковые включения в Python — короткий и лаконичный способ создания списков. Не волнуйтесь, если этот материал пока что кажется сложным. Я подробно рассматриваю списки в других учебниках — сейчас важнее знать, что они существуют!
Изображение ниже показывает синтаксис работы генератора списков в Python.
Мы создаем новый список и затем оцениваем выражение для каждого элемента в другом итерируемом элементе.
Например, если у нас есть список, содержащий значения от 1 до 10, мы можем использовать генератор списка для создания нового списка со всеми квадратами этих чисел.
Давайте посмотрим, как мы можем сделать это с помощью list comprehension:
Можно увидеть, что это довольно читаемый подход к созданию новых списков. Часто таким способом бывает легче читать и понимать начинающим, чем писать самим. Поэтому, если это сразу не понятно, не отчаивайтесь!
В следующем разделе вы узнаете больше о списках списков в Python.
Списки списков Python
Так как списки в Python являются просто контейнерными объектами, они могут содержать другие списки. Это может показаться немного странным сначала, но чем больше вы работаете с языком, тем больше в этом будет смысла.
Можно думать о списках списков как о матрицах для хранения данных. Поскольку сами списки упорядочены, это может быть логичным способом хранения данных. Например, можно использовать каждый вложенный список для хранения информации о различных клиентах, а внешний список для хранения всех остальных списков. Это избавляет вас от необходимости инициализировать новые переменные для каждого списка.
Посмотрим, как это может выглядеть:
Теперь каждый элемент в нашем списке customers
на самом деле является списком. Поэтому, если мы хотим получить первый элемент, используя индекс 0, мы вернем на самом деле первый список.
Если мы хотим получить доступ к первому элементу в нашем первом списке, мы можем просто использовать индексные операторы.
Списки списков — это один из способов хранения данных. Однако они не лучший способ для хранения больших объемов табличных данных. Для этого вам стоит рассмотреть использование Numpy и Pandas, о которых вы узнаете в будущих уроках.
Заключение и Резюме
Фух! Это был длинный учебник! Вы узнали о структуре данных списка в Python и ее различных атрибутах. Затем вы узнали, как работать со списками, например, проверять членство, добавлять и удалять элементы, и доступ к данным внутри списков.
Ниже вы найдете краткий обзор списков Python:
Списки в Python являются гетерогенными, изменяемыми, упорядоченными структурами данных
Они могут быть созданы с использованием функции
list()
или квадратных скобок[]
Поскольку они упорядочены и индексированы, вы можете получить доступ к отдельным элементам, используя метод индексирования
[index]
, или умножать элементы, используя срезыВы можете добавлять элементы с помощью методов
.append()
и.extend()
, а удалять элементы с помощью методов.remove()
и.pop()
Вы можете перебирать списки, используя простые циклы for, и вы можете использовать списковые включения для создания списков в краткой форме
Наконец, вы можете использовать списки списков для хранения более сложных структур данных, таких как те, которые предназначены для представления в табличной форме.
Далее вы узнаете, как использовать условия и условные выражения в Python для дальнейшей модификации ваших программ на Python!
Дополнительные ресурсы
Посмотрите эти связанные учебные пособия, чтобы узнать о смежных темах:
Python: выберите случайный элемент из списка
4 способа очистить список Python
Python: разделить список на n фрагментов (4 способа)
Python IndexError: объяснение ошибки индекса списка вне диапазона
Last updated