Списки: создание, изменение и полезные методы - Python с нуля до Junior: Путь к первой работе в IT - Qpel.AI

Списки: создание, изменение и полезные методы

Мы уже умеем работать с отдельными значениями: числами, текстом (строками) и булевыми значениями (правда/ложь). Но что, если нужно хранить и обрабатывать много связанных данных? Например, список покупок, имена студентов или показания датчиков.

Для таких задач в 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]

Практическое задание

Представьте, что вы ведёте список дел на день.

  1. Создайте список todo_list с тремя задачами: "Купить продукты", "Заплатить за интернет", "Позвонить маме".
  2. Выведите весь список.
  3. Добавьте в конец списка новую задачу: "Сделать домашнее задание по Python".
  4. Измените вторую задачу ("Заплатить за интернет") на "Оплатить ЖКХ".
  5. Удалите задачу "Купить продукты" из списка.
  6. Выведите обновлённый список и его длину.
# Ваш код здесь

Списки — это фундамент для работы со множеством данных в Python. Они очень гибкие и мощные. Но что, если нам нужно хранить данные не просто по порядку, а по каким-то уникальным именам или идентификаторам? Для этого в Python есть другая, не менее важная коллекция — словари. О них мы поговорим на следующей странице.