Списки в Python

В этой статье мы подробно рассмотрим списки (list) в Python — один из самых гибких и часто используемых типов данных. Списки позволяют хранить коллекции элементов и манипулировать ими различными способами.

Что такое список?

Список в Python — это упорядоченная, изменяемая коллекция элементов, которые могут быть разных типов. Вы можете представить список как контейнер, в котором хранятся различные объекты, расположенные в определенном порядке.

Основные свойства списков:

  • Упорядоченность: элементы хранятся в том порядке, в котором они были добавлены
  • Изменяемость: можно добавлять, удалять и изменять элементы после создания списка
  • Индексируемость: к каждому элементу можно обратиться по его позиции (индексу)
  • Допускают дубликаты: один и тот же элемент может встречаться в списке несколько раз

Создание списков

Существует несколько способов создания списков в Python:

С помощью квадратных скобок []

Python 3.13
# Пустой список
>>> empty_list = []
>>> print(empty_list)
[]
# Список чисел >>> numbers = [1, 2, 3, 4, 5] >>> print(numbers)
[1, 2, 3, 4, 5]
# Список разных типов данных >>> mixed = [1, "привет", True, 3.14] >>> print(mixed)
[1, 'привет', True, 3.14]
# Вложенные списки (список списков) >>> matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] >>> print(matrix)
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

С помощью конструктора list()

Python 3.13
# Создание пустого списка
>>> empty_list = list()
>>> print(empty_list)
[]
# Создание списка из строки (каждый символ становится элементом) >>> chars = list("Python") >>> print(chars)
['P', 'y', 't', 'h', 'o', 'n']
# Создание списка из других итерируемых объектов >>> tuple_to_list = list((1, 2, 3)) >>> print(tuple_to_list)
[1, 2, 3]
>>> set_to_list = list({1, 2, 3}) >>> print(set_to_list)
[1, 2, 3]

С помощью генераторов списков

Python 3.13
# Создание списка квадратов чисел от 0 до 9
>>> squares = [x**2 for x in range(10)]
>>> print(squares)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# Создание списка четных чисел от 0 до 9 >>> even_numbers = [x for x in range(10) if x % 2 == 0] >>> print(even_numbers)
[0, 2, 4, 6, 8]

Доступ к элементам списка

Индексация

В Python индексация начинается с 0, то есть первый элемент имеет индекс 0, второй — 1, и так далее:

Python 3.13
>>> fruits = ["яблоко", "банан", "вишня", "груша", "апельсин"]

# Получение элементов по индексу
>>> first_fruit = fruits[0]
>>> print(f"Первый фрукт: {first_fruit}")
Первый фрукт: яблоко
# Отрицательные индексы для доступа с конца списка >>> last_fruit = fruits[-1] >>> print(f"Последний фрукт: {last_fruit}")
Последний фрукт: апельсин
>>> second_last = fruits[-2] >>> print(f"Предпоследний фрукт: {second_last}")
Предпоследний фрукт: груша

Срезы (slices)

Срезы позволяют получить подсписок, указав начальный и конечный индексы:

Python 3.13
>>> fruits = ["яблоко", "банан", "вишня", "груша", "апельсин"]

# Синтаксис среза: список[начало:конец:шаг]
# Начало включается, конец не включается!

# Первые три элемента
>>> first_three = fruits[0:3]
>>> print(f"Первые три фрукта: {first_three}")
Первые три фрукта: ['яблоко', 'банан', 'вишня']
# То же самое, но начальный индекс можно опустить, если он 0 >>> first_three = fruits[:3] >>> print(f"Первые три фрукта: {first_three}")
Первые три фрукта: ['яблоко', 'банан', 'вишня']
# Каждый второй элемент >>> every_second = fruits[::2] >>> print(f"Каждый второй фрукт: {every_second}")
Каждый второй фрукт: ['яблоко', 'вишня', 'апельсин']
# Разворот списка >>> reversed_list = fruits[::-1] >>> print(f"Список в обратном порядке: {reversed_list}")
Список в обратном порядке: ['апельсин', 'груша', 'вишня', 'банан', 'яблоко']

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

В отличие от строк, списки являются изменяемыми, то есть вы можете изменять, добавлять и удалять элементы:

Python 3.13
>>> fruits = ["яблоко", "банан", "вишня"]

# Изменение элемента
>>> fruits[0] = "киви"
>>> print(fruits)
['киви', 'банан', 'вишня']
# Изменение нескольких элементов с помощью среза >>> numbers = [1, 2, 3, 4, 5] >>> numbers[1:4] = [20, 30, 40] >>> print(numbers)
[1, 20, 30, 40, 5]
# Можно даже заменить несколько элементов на другое количество >>> numbers = [1, 2, 3, 4, 5] >>> numbers[1:4] = [20, 30] >>> print(numbers)
[1, 20, 30, 5]

Основные методы списков

Python предоставляет множество встроенных методов для работы со списками:

Добавление элементов

Python 3.13
>>> fruits = ["яблоко", "банан"]

# Добавление элемента в конец списка
>>> fruits.append("вишня")
>>> print(fruits)
['яблоко', 'банан', 'вишня']
# Вставка элемента на определенную позицию >>> fruits.insert(1, "апельсин") >>> print(fruits)
['яблоко', 'апельсин', 'банан', 'вишня']
# Добавление элементов из другого списка >>> more_fruits = ["груша", "виноград"] >>> fruits.extend(more_fruits) >>> print(fruits)
['яблоко', 'апельсин', 'банан', 'вишня', 'груша', 'виноград']
# Объединение списков с помощью оператора + >>> combined = fruits + ["ананас", "манго"] >>> print(combined)
['яблоко', 'апельсин', 'банан', 'вишня', 'груша', 'виноград', 'ананас', 'манго']

Удаление элементов

Python 3.13
>>> fruits = ["яблоко", "банан", "вишня", "апельсин", "банан"]

# Удаление элемента по значению (удаляет только первое вхождение)
>>> fruits.remove("банан")
>>> print(fruits)
['яблоко', 'вишня', 'апельсин', 'банан']
# Удаление элемента по индексу и возврат его значения >>> removed = fruits.pop(1) >>> print(f"Удален: {removed}")
Удален: вишня
>>> print(f"Список после удаления: {fruits}")
Список после удаления: ['яблоко', 'апельсин', 'банан']
# Если индекс не указан, pop() удаляет и возвращает последний элемент >>> last = fruits.pop() >>> print(f"Последний элемент: {last}")
Последний элемент: банан
>>> print(fruits)
['яблоко', 'апельсин']
# Удаление всех элементов из списка >>> fruits.clear() >>> print(f"Пустой список: {fruits}")
Пустой список: []
# Оператор del для удаления элементов по индексу или срезу >>> numbers = [1, 2, 3, 4, 5] >>> del numbers[0] >>> print(numbers)
[2, 3, 4, 5]
>>> del numbers[1:3] >>> print(numbers)
[2, 5]

Поиск и подсчет элементов

Python 3.13
>>> fruits = ["яблоко", "банан", "вишня", "банан", "груша"]

# Проверка наличия элемента в списке
>>> print("банан" in fruits)
True
>>> print("арбуз" in fruits)
False
# Поиск индекса первого вхождения элемента >>> banana_index = fruits.index("банан") >>> print(f"Индекс первого банана: {banana_index}")
Индекс первого банана: 1
# Подсчет количества вхождений элемента >>> banana_count = fruits.count("банан") >>> print(f"Количество бананов: {banana_count}")
Количество бананов: 2

Сортировка и разворот

Python 3.13
# Сортировка списка (изменяет исходный список)
>>> numbers = [3, 1, 4, 1, 5, 9, 2]
>>> numbers.sort()
>>> print(f"Отсортированный список: {numbers}")
Отсортированный список: [1, 1, 2, 3, 4, 5, 9]
# Сортировка в обратном порядке >>> numbers.sort(reverse=True) >>> print(f"Обратная сортировка: {numbers}")
Обратная сортировка: [9, 5, 4, 3, 2, 1, 1]
# Если не хотите изменять исходный список, используйте sorted() >>> original = [3, 1, 4, 1, 5] >>> sorted_list = sorted(original) >>> print(f"Оригинал: {original}")
Оригинал: [3, 1, 4, 1, 5]
>>> print(f"Отсортированная копия: {sorted_list}")
Отсортированная копия: [1, 1, 3, 4, 5]

Копирование списков

При работе со списками важно понимать, как работает присваивание и копирование:

Python 3.13
# Создаем список
>>> original = [1, 2, 3]

# Присваивание не создает копию — обе переменные указывают на один список
>>> reference = original
>>> reference.append(4)
>>> print(f"Оригинал после изменения ссылки: {original}")
Оригинал после изменения ссылки: [1, 2, 3, 4]
# Правильные способы копирования списка: # 1. Метод copy() >>> copy1 = original.copy() # 2. Использование среза [:] >>> copy2 = original[:] # 3. Функция list() >>> copy3 = list(original) # Проверим, что копии не связаны с оригиналом >>> copy1.append(5) >>> print(f"Оригинал: {original}")
Оригинал: [1, 2, 3, 4]
>>> print(f"Копия 1: {copy1}")
Копия 1: [1, 2, 3, 4, 5]

Практический пример использования списка

Python 3.13
# Список студентов и их оценок
>>> students = ["Анна", "Иван", "Мария", "Петр", "Елена"]
>>> grades = [95, 82, 90, 78, 88]

# Нахождение студента с наивысшим баллом
>>> highest_score = max(grades)
>>> top_student_index = grades.index(highest_score)
>>> print(f"Лучший студент: {students[top_student_index]} с оценкой {highest_score}")
Лучший студент: Анна с оценкой 95

Проверка понимания

Какой из следующих способов правильно создаст копию списка, не связанную с оригиналом?