В статье разбираем списки в Python: что это, как создавать, какие операции с ними существуют, какие ошибки допускают новички и как Гигачат поможет их избежать.
Списки — это один из типов данных языка Python. Их используют для хранения упорядоченных коллекций элементов. В отличие от строк и кортежей, списки изменяемы: после создания можно добавлять, удалять или изменять содержимое, не создавая новый объект.
Элементами списка могут быть любые объекты: строки, числа, логические значения, функции, другие списки. К элементам легко обращаться по индексам, а производительность остается высокой, даже если операций много.
Их используют почти во всех программах: везде, где нужно работать с набором данных. Приведем примеры:
Списки универсальны, поэтому они часто становятся инструментом, который осваивают начинающие разработчики в первую очередь.
Наиболее простой способ — записать элементы внутри квадратных скобок через запятую:
numbers = [1, 2, 3, 4, 5]
Если вы не знаете, какие элементы нужно внести, или создаете заготовку для добавления данных позже (например, в цикле), нужен пустой список:
empty = []
Как мы говорили выше, объекты могут быть любыми:
Если внутри повторяется одно и то же значение, запись может выглядеть так:
zeros = [0] * 5 # [0, 0, 0, 0, 0]
Чтобы создать пустой список через list(), достаточно написать:
empty = list()
Особенность функции list() в том, что она умеет преобразовывать в список другие объекты:
Это полезно, когда нужно получить доступ к элементам по индексам, изменить или отсортировать их.
Также можно создать список из последовательности чисел, например:
Индекс — это порядковый номер элемента. В Python индексация начинается с нуля — первый элемент имеет индекс 0, второй — 1 и так далее. Чтобы найти значение по индексу, используется такой синтаксис:
numbers[индекс]
Например:
Через индекс также можно изменить элемент:
Если обратиться к индексу, которого не существует, Python выдаст ошибку IndexError. Чтобы избежать ее, используют функцию len() (возвращает длину списка):
len(numbers) # 5
Допустимые индексы при этом от нуля до 4.
Иногда к элементам можно обращаться через двойную индексацию:
Отрицательные индексы полезны, когда нужно обратиться к элементам с конца. Последний элемент имеет индекс −1, предпоследний — −2 и так далее. Например:
Это удобнее, чем использовать альтернативную запись:
numbers[len(numbers) — 1]
Срезы — это механизм Python, который помогает получать части списков без циклов. Общий синтаксис имеет вид список[start:stop:step], где:
Простой пример:
Параметры можно пропускать — тогда Python подставит значения по умолчанию:
Если нужно обработать список в обратном порядке, используется отрицательный шаг:
numbers[::-1] # [5, 4, 3, 2, 1]
Индекс также может быть отрицательным:
numbers[-4:-1] # [2, 3, 4]
С помощью срезов можно изменить значения:
numbers[1:3] = [10, 20] # [1, 10, 20, 4, 5]
Наиболее простой способ объединить списки — использовать оператор +. В отличие от append(), он создает новый список, исходный при этом не меняется:
Для копирования списков используют метод copy():
Цикл for — это главный инструмент для перебора. Он берет первый элемент, выполняет блок кода и переходит к следующему. Процесс заканчивается, когда элементов не остается.
С помощью for можно вывести все элементы на экран:
Но чаще цикл комбинируют с условными конструкциями:
Если внутри списка есть вложенные структуры, используют вложенные циклы:
Функция enumerate() возвращает пары: индекс и элемент. Например:
Также она позволяет задать начальное значение индекса (иногда это удобнее для разработчика):
С помощью enumerate() можно найти элемент по индексу:
append() добавляет один элемент в конец списка:
Метод extend() добавляет в список все элементы из другого итерируемого объекта (строки, кортежи и т. д.):
Метод insert() вставляет элемент по указанному индексу:
Индексы всех элементов справа сдвинулись на 1.
remove() удаляет только первое найденное значение (не индекс) из списка:
Если такого значения нет, Python выдаст ValueError.
Метод pop() удаляет элемент по индексу и возвращает его:
Метод clear() очищает список (при этом сам объект не удаляется):
Метод del() позволяет удалять срезы:
Для поиска используют метод index() — он возвращает индекс первого совпадения:
Есть метод count(), который позволяет узнать, сколько раз элемент встречается в списке:
Хотя оператор in — не метод, его также используют для поиска, поэтому приведем пример с ним:
Главный метод сортировки — sort():
Обратите внимание: он меняет исходный список. Если нужно сохранить его вид, используют sorted(), который возвращает новый список:
Генератор списка — это конструкция в Python, которая позволяет создать новый список из итерируемого объекта (или существующей последовательности) в одну строку. Например:
Такая запись более читаемая и краткая, чем стандартный способ создания списка.
Сюда можно добавить условие:
*Ошибки при копировании списка. Правильно использовать метод copy(), а такой код означает, что переменные a и b ссылаются на один объект:
Начинающие разработчики часто встречают трудности и не всегда могут найти ответы на свои вопросы в интернете или книгах. Гигачат — бесплатная нейросеть от Сбера — поможет справиться со многими сложностями в обучении.
Хотя в программировании есть сложные темы, большинство только кажутся такими из-за сложных формулировок. Нейросеть умеет адаптировать объяснения под уровень и запрос пользователя: например, иногда людям легче усваивать знания через аналогии из жизни.
Кроме того, ИИ может разбить тему на шаги: сначала дать теорию, потом показать код на Python и объяснить, что происходит в каждой строке. Дополнительно Гигачат сформулирует вопросы или задания, чтобы вы закрепили тему.
Опишите задачу Гигачату, и он напишет решающую ее программу несколькими способами. Рассматривая разные варианты, вы не только поймете, как сделать что-либо, но и найдете наиболее удобный способ.
Помимо генерации примеров, нейросеть может объяснить каждую строку и показать, как меняются данные в ходе выполнения программы.
Все это поможет учиться быстрее, поскольку не нужно будет тратить время на поиск конкретных примеров на форумах или в учебниках по Python.
Любая программа может содержать ошибки — это нормальная часть обучения. Иногда найти их довольно просто, но бывают ситуации, когда на поиск ошибки уходят часы.
Гигачат умеет быстро анализировать код на Python, находить ошибки и объяснять, из-за чего они возникают. Он также генерирует исправленную версию программы, рассказывает, что изменилось и почему код стал работать.
Обучение через ошибки помогает лучше понять поведение списков, запомнить типичные проблемы в коде и писать корректные программы быстрее.