Списки: создание, изменение и полезные методы
Мы уже умеем работать с отдельными значениями: числами, текстом (строками) и булевыми значениями (правда/ложь). Но что, если нужно хранить и обрабатывать много связанных данных? Например, список покупок, имена студентов или показания датчиков.
Для таких задач в Python есть коллекции данных. Одна из самых частых и универсальных — это списки.
Что такое списки в Python?
Список (list) в Python — это упорядоченная, изменяемая коллекция элементов.
Представьте список как коробку, в которой лежат разные предметы, и у каждого есть свой номер. Вы можете добавлять новые предметы, убирать старые или менять их местами.
Что это значит:
- Упорядоченная: У каждого элемента есть свой номер — индекс, который начинается с 0. Вы можете получить элемент по его индексу.
- Изменяемая (мутабельная): Вы можете добавлять, удалять, менять элементы списка после его создания.
- Коллекция: Список может хранить элементы разных типов: числа, строки, булевы значения и даже другие списки!
Создаём списки
Создать список просто. Элементы списка заключаются в квадратные скобки [] и разделяются запятыми.
# Пустой список
my_empty_list = []
print(f"Пустой список: {my_empty_list}")
# Список чисел
numbers = [1, 2, 3, 4, 5]
print(f"Список чисел: {numbers}")
# Список строк (текста)
fruits = ["яблоко", "банан", "вишня"]
print(f"Список строк: {fruits}")
# Список разных типов данных
mixed_list = ["Привет", 123, True, 3.14]
print(f"Смешанный список: {mixed_list}")
# Список списков (список внутри списка)
matrix = [[1, 2], [3, 4]]
print(f"Вложенный список: {matrix}")
Доступ к элементам и их изменение
Доступ к элементам происходит по их индексу. Помните, индексация начинается с 0.
fruits = ["яблоко", "банан", "вишня", "апельсин"]
# Первый элемент (индекс 0)
print(f"Первый фрукт: {fruits[0]}") # Выведет: яблоко
# Третий элемент (индекс 2)
print(f"Третий фрукт: {fruits[2]}") # Выведет: вишня
# Отрицательные индексы: доступ с конца списка
print(f"Последний фрукт: {fruits[-1]}") # Выведет: апельсин
print(f"Предпоследний фрукт: {fruits[-2]}") # Выведет: вишня
Важно: Если вы попытаетесь обратиться к несуществующему индексу, Python выдаст ошибку
IndexError.
Чтобы изменить элемент, присвойте новое значение по его индексу:
fruits = ["яблоко", "банан", "вишня"]
print(f"Исходный список: {fruits}")
fruits[1] = "груша" # Меняем "банан" на "груша"
print(f"Список после изменения: {fruits}") # Выведет: ['яблоко', 'груша', 'вишня']
Полезные методы списков
Python предлагает много встроенных методов для работы со списками. Вот самые частые:
Добавляем элементы
-
append(item): Добавляет элемент в конец списка.my_list = [1, 2, 3] my_list.append(4) print(f"После append: {my_list}") # Выведет: [1, 2, 3, 4] -
insert(index, item): Вставляет элементitemпо указанномуindex.my_list = [1, 2, 4] my_list.insert(2, 3) # Вставляем 3 по индексу 2 print(f"После insert: {my_list}") # Выведет: [1, 2, 3, 4] -
extend(iterable): Добавляет все элементы из другой коллекции (например, другого списка) в конец текущего списка.list1 = [1, 2] list2 = [3, 4] list1.extend(list2) print(f"После extend: {list1}") # Выведет: [1, 2, 3, 4]
Удаляем элементы
-
remove(item): Удаляет первое вхождение указанного элемента. Если элемента нет, вызовет ошибкуValueError.my_list = ["a", "b", "c", "b"] my_list.remove("b") print(f"После remove: {my_list}") # Выведет: ['a', 'c', 'b'] -
pop([index]): Удаляет элемент по указанномуindexи возвращает его. Еслиindexне указан, удаляет и возвращает последний элемент.my_list = [10, 20, 30, 40] removed_item = my_list.pop(1) # Удаляем элемент по индексу 1 (20) print(f"Удаленный элемент: {removed_item}") # Выведет: 20 print(f"Список после pop по индексу: {my_list}") # Выведет: [10, 30, 40] last_item = my_list.pop() # Удаляем последний элемент (40) print(f"Удаленный последний элемент: {last_item}") # Выведет: 40 print(f"Список после pop без индекса: {my_list}") # Выведет: [10, 30] -
clear(): Удаляет все элементы из списка.my_list = [1, 2, 3] my_list.clear() print(f"После clear: {my_list}") # Выведет: [] -
del: Это не метод, а оператор Python. Используется для удаления элемента по индексу или части списка.my_list = ["a", "b", "c", "d"] del my_list[1] # Удаляем элемент по индексу 1 ("b") print(f"После del по индексу: {my_list}") # Выведет: ['a', 'c', 'd'] del my_list[1:] # Удаляем элементы с индекса 1 до конца print(f"После del среза: {my_list}") # Выведет: ['a']
Другие полезные методы
-
len(list): Встроенная функция Python (не метод списка), возвращает количество элементов в списке.my_list = ["яблоко", "банан", "вишня"] print(f"Длина списка: {len(my_list)}") # Выведет: 3 -
index(item, [start, end]): Возвращает индекс первого вхождения указанного элемента. Можно указать диапазон поиска. Если элемент не найден, вызоветValueError.my_list = ["a", "b", "c", "b"] print(f"Индекс 'c': {my_list.index('c')}") # Выведет: 2 -
count(item): Возвращает количество вхождений указанного элемента в списке.my_list = ["a", "b", "c", "b"] print(f"Количество 'b': {my_list.count('b')}") # Выведет: 2 -
sort(): Сортирует элементы списка на месте (изменяет сам список). По умолчанию — по возрастанию.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] -
reverse(): Переворачивает порядок элементов списка на месте.my_list = [1, 2, 3, 4] my_list.reverse() print(f"Перевернутый список: {my_list}") # Выведет: [4, 3, 2, 1]
Срезы списков (Slicing)
Срезы позволяют получить часть списка, создавая новый список. Синтаксис [start:end:step]:
start: Начальный индекс (включая). По умолчанию 0.end: Конечный индекс (не включая). По умолчанию конец списка.step: Шаг (через сколько элементов брать). По умолчанию 1.
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# Срез с начала до индекса 5 (не включая)
print(f"numbers[:5]: {numbers[:5]}") # Выведет: [0, 1, 2, 3, 4]
# Срез с индекса 3 до конца
print(f"numbers[3:]: {numbers[3:]}") # Выведет: [3, 4, 5, 6, 7, 8, 9]
# Срез с индекса 2 до 7 (не включая)
print(f"numbers[2:7]: {numbers[2:7]}") # Выведет: [2, 3, 4, 5, 6]
# Срез всего списка (создание копии)
print(f"numbers[:]: {numbers[:]}") # Выведет: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# Срез с шагом 2
print(f"numbers[::2]: {numbers[::2]}") # Выведет: [0, 2, 4, 6, 8]
# Переворот списка с помощью среза
print(f"numbers[::-1]: {numbers[::-1]}") # Выведет: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Практическое задание
Представьте, что вы ведёте список дел на день.
- Создайте список
todo_listс тремя задачами: "Купить продукты", "Заплатить за интернет", "Позвонить маме". - Выведите весь список.
- Добавьте в конец списка новую задачу: "Сделать домашнее задание по Python".
- Измените вторую задачу ("Заплатить за интернет") на "Оплатить ЖКХ".
- Удалите задачу "Купить продукты" из списка.
- Выведите обновлённый список и его длину.
# Ваш код здесь
Списки — это фундамент для работы со множеством данных в Python. Они очень гибкие и мощные. Но что, если нам нужно хранить данные не просто по порядку, а по каким-то уникальным именам или идентификаторам? Для этого в Python есть другая, не менее важная коллекция — словари. О них мы поговорим на следующей странице.