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

Списки - это упорядоченные изменяемые коллекции объектов произвольных типов. Списки являются одним из самых универсальных и часто используемых типов данных в Python.

Теория: Что такое коллекции в Python?

Коллекции в Python - это структуры данных, которые могут содержать несколько элементов. Представьте коллекцию как коробку, в которую можно положить разные предметы.

Списки - это один из видов коллекций, которые имеют следующие характеристики:

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

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

Списки можно создавать несколькими способами:

Практическое объяснение: Как создавать списки?

Создание списков в Python имеет несколько вариантов:

  • Пустой список - создается с помощью пустых квадратных скобок []
  • Список с элементами - элементы перечисляются через запятую внутри квадратных скобок
  • С помощью функции list() - преобразует другие последовательности в список
  • С помощью функции range() - создает список чисел в заданном диапазоне

Важно: квадратные скобки [] - это специальный синтаксис Python для создания списков.

Создание списков
# Пустой список
пустой_список = []
print(пустой_список)  # Вывод: []

# Список с элементами
числа = [1, 2, 3, 4, 5]
print(числа)  # Вывод: [1, 2, 3, 4, 5]

# Список с разными типами данных
смешанный = ["привет", 42, True, 3.14, [1, 2, 3]]
print(смешанный)  # Вывод: ['привет', 42, True, 3.14, [1, 2, 3]]

# Создание списка с помощью list()
список_из_строки = list("Python")
print(список_из_строки)  # Вывод: ['P', 'y', 't', 'h', 'o', 'n']

# Создание списка с помощью range()
диапазон = list(range(1, 6))
print(диапазон)  # Вывод: [1, 2, 3, 4, 5]

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

Элементы списка доступны по индексу. Индексация начинается с нуля.

Теория: Что такое индексация?

Индексация - это способ доступа к элементам коллекции по их порядковому номеру. В Python индексация начинается с нуля, что означает, что первый элемент имеет индекс 0, а не 1.

Индексация важна, потому что:

  • Позволяет получить доступ к конкретному элементу списка
  • Позволяет изменить значение элемента
  • Позволяет удалять элементы по позиции

Python также поддерживает отрицательную индексацию, где -1 - это последний элемент, -2 - предпоследний и так далее.

Практическое объяснение: Как работать с индексами?

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

  • Индексы начинаются с 0, а не с 1
  • Попытка доступа к несуществующему индексу вызовет ошибку IndexError
  • Отрицательные индексы начинаются с -1 (последний элемент)
  • Индексы используются как в квадратных скобках после имени списка
Доступ к элементам
# Список фруктов
фрукты = ["яблоко", "банан", "груша", "апельсин"]

# Доступ к элементам по индексу
print(фрукты[0])   # Вывод: яблоко
print(фрукты[2])   # Вывод: груша

# Отрицательная индексация (с конца)
print(фрукты[-1])  # Вывод: апельсин
print(фрукты[-2])  # Вывод: груша

# Изменение элемента
фрукты[1] = "киви"
print(фрукты)     # Вывод: ['яблоко', 'киви', 'груша', 'апельсин']

Срезы списков

Срезы позволяют получить подмножество элементов списка.

Теория: Что такое срезы (slices)?

Срезы - это мощный механизм Python для получения подмножества элементов из последовательности. Представьте срез как "окно", через которое вы видите часть списка.

Синтаксис срезов: [начало:конец:шаг]

  • начало - индекс первого элемента в срезе (включительно)
  • конец - индекс первого элемента, который НЕ включается в срез
  • шаг - интервал между элементами (по умолчанию 1)

Любой из этих параметров может быть опущен, что означает использование значения по умолчанию.

Практическое объяснение: Как использовать срезы?

Срезы - это удобный способ работать с частями списков:

  • Если опустить начало [:конец] - берется с начала списка
  • Если опустить конец [начало:] - берется до конца списка
  • Если опустить оба [:] - создается копия всего списка
  • Отрицательные значения работают как с обычной индексацией
  • Шаг может быть отрицательным для получения элементов в обратном порядке
Срезы списков
# Список чисел
числа = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# Получение среза [начало:конец:шаг]
print(числа[2:6])     # Вывод: [2, 3, 4, 5]
print(числа[:4])      # Вывод: [0, 1, 2, 3]
print(числа[5:])      # Вывод: [5, 6, 7, 8, 9]
print(числа[::2])      # Вывод: [0, 2, 4, 6, 8]
print(числа[1:8:2])   # Вывод: [1, 3, 5, 7]
print(числа[::-1])     # Вывод: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] (перевернутый список)

Методы списков

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

Теория: Что такое методы объектов?

Методы - это функции, которые "принадлежат" объекту. В случае списков методы позволяют изменять список или получать информацию о нем.

Синтаксис вызова метода: объект.метод(аргументы)

Важно понимать:

  • Методы изменяют сам объект (в случае списков)
  • Некоторые методы возвращают значения, другие возвращают None
  • Методы вызываются через точку после имени объекта
Практическое объяснение: Как использовать методы списков?

Методы списков позволяют выполнять различные операции:

  • append() - добавляет элемент в конец списка
  • insert() - вставляет элемент по указанному индексу
  • extend() - добавляет несколько элементов из другой коллекции
  • remove() - удаляет первое вхождение указанного элемента
  • pop() - удаляет и возвращает элемент по индексу (по умолчанию последний)

Важно: большинство методов изменяют исходный список, а не создают новый.

Основные методы списков
# Создание списка
список = [1, 2, 3]
print(f"Исходный список: {список}")

# append() - добавление элемента в конец
список.append(4)
print(f"После append(4): {список}")

# insert() - вставка элемента по индексу
список.insert(1, 1.5)
print(f"После insert(1, 1.5): {список}")

# extend() - добавление нескольких элементов
список.extend([5, 6])
print(f"После extend([5, 6]): {список}")

# remove() - удаление первого вхождения элемента
список.remove(1.5)
print(f"После remove(1.5): {список}")

# pop() - удаление и возврат элемента по индексу (по умолчанию последний)
удаленный = список.pop()
print(f"После pop(): {список}, удаленный элемент: {удаленный}")

# pop() с индексом
удаленный = список.pop(0)
print(f"После pop(0): {список}, удаленный элемент: {удаленный}")
Другие полезные методы списков
# Создание списка
список = [3, 1, 4, 1, 5, 9, 2, 6]

# index() - поиск индекса элемента
print(f"Индекс элемента 4: {список.index(4)}")

# count() - подсчет вхождений элемента
print(f"Количество единиц: {список.count(1)}")

# sort() - сортировка списка
список.sort()
print(f"После sort(): {список}")

# reverse() - переворот списка
список.reverse()
print(f"После reverse(): {список}")

# clear() - очистка списка
список.clear()
print(f"После clear(): {список}")

Функции для работы со списками

В Python есть встроенные функции для работы со списками:

Теория: Встроенные функции vs методы

Важно различать встроенные функции и методы:

  • Встроенные функции - вызываются как функция(объект), не изменяют исходный объект
  • Методы - вызываются как объект.метод(), обычно изменяют сам объект

Например, len(список) - функция, а список.append(элемент) - метод.

Практическое объяснение: Как использовать встроенные функции со списками?

Встроенные функции для списков:

  • len() - возвращает количество элементов в списке
  • max() - возвращает максимальный элемент (для чисел)
  • min() - возвращает минимальный элемент (для чисел)
  • sum() - возвращает сумму всех элементов (только для чисел)
  • sorted() - возвращает новый отсортированный список (не изменяет исходный)

Эти функции не изменяют исходный список, а возвращают новое значение или новый список.

Встроенные функции
# Список чисел
числа = [3, 1, 4, 1, 5, 9, 2, 6]

# len() - длина списка
print(f"Длина списка: {len(числа)}")

# max() и min() - максимальный и минимальный элементы
print(f"Максимальный элемент: {max(числа)}")
print(f"Минимальный элемент: {min(числа)}")

# sum() - сумма элементов (только для чисел)
print(f"Сумма элементов: {sum(числа)}")

# sorted() - возвращает отсортированный список (не изменяет исходный)
отсортированный = sorted(числа)
print(f"Исходный список: {числа}")
print(f"Отсортированный: {отсортированный}")

Списковые включения (List Comprehensions)

Списковые включения - это компактный способ создания списков:

Теория: Что такое списковые включения?

Списковые включения (list comprehensions) - это синтаксическая конструкция Python для создания списков на основе существующих списков или других итерируемых объектов.

Преимущества списковых включений:

  • Более компактный и читаемый код
  • Часто быстрее традиционных циклов
  • Меньше вероятность ошибок

Синтаксис: [выражение for переменная in последовательность if условие]

Практическое объяснение: Как использовать списковые включения?

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

  • Выражение - что делать с каждым элементом
  • for переменная in последовательность - перебор элементов
  • if условие - опциональный фильтр (только для подходящих элементов)

Пример: [x**2 for x in range(10) if x % 2 == 0] создает список квадратов четных чисел от 0 до 9.

Списковые включения
# Создание списка квадратов чисел от 0 до 9
# Обычный способ
квадраты = []
for i in range(10):
    квадраты.append(i ** 2)
print(квадраты)

# Списковое включение
квадраты = [i ** 2 for i in range(10)]
print(квадраты)

# Списковое включение с условием
четные_квадраты = [i ** 2 for i in range(10) if i % 2 == 0]
print(четные_квадраты)

# Преобразование строк
слова = ["привет", "мир", "python"]
заглавные = [слово.upper() for слово in слова]
print(заглавные)

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

Теория: Как выполнять задания по работе со списками

Для выполнения заданий по работе со списками следуйте этим шагам:

  1. Определите, какие данные нужно хранить в списке
  2. Выберите подходящий способ создания списка
  3. Определите, какие операции нужно выполнить (добавление, удаление, поиск, сортировка)
  4. Выберите подходящие методы или функции для выполнения операций
  5. Проверьте результаты работы с помощью print()

Помните о важных аспектах:

  • Индексация начинается с 0
  • Методы изменяют исходный список, функции обычно возвращают новый
  • Проверяйте границы индексов, чтобы избежать ошибок
Задания
  1. Анализ температур: Создайте список из 7 температур за неделю. Найдите среднюю температуру, максимальную и минимальную. Выведите результаты с пояснениями. Подсказка: используйте функции sum(), len(), max(), min() для анализа данных.
  2. Фильтрация данных: Создайте список из 15 случайных чисел от 1 до 100. Создайте новый список, содержащий только четные числа. Подсказка: используйте списковое включение с условием для фильтрации.
  3. Управление списком покупок: Создайте список покупок из 5 товаров. Реализуйте функции для добавления товара, удаления товара, сортировки списка и подсчета количества товаров. Подсказка: используйте методы append(), remove(), sort() и функцию len().
  4. Анализ текста: Введите предложение и преобразуйте его в список слов. Подсчитайте количество слов, найдите самое длинное слово. Подсказка: используйте метод split() для разделения строки на слова.
  5. Математические операции: Создайте список чисел. Напишите функции для вычисления квадратов, кубов и факториалов всех чисел в списке. Подсказка: используйте списковые включения и вспомогательную функцию для факториала.
  6. Работа с матрицами: Создайте матрицу 3x3 как список списков. Реализуйте функции для вывода матрицы, нахождения суммы элементов и транспонирования матрицы. Подсказка: используйте вложенные циклы для работы с матрицами.
  7. Статистика оценок: Создайте список оценок студентов. Найдите средний балл, количество отличников (оценка 5), количество неуспевающих (оценка 2). Подсказка: используйте функции sum(), len() и списковые включения с условиями.
  8. Работа с диапазонами: Создайте список чисел от 1 до 50. С помощью срезов создайте подсписки: первые 10 чисел, последние 10 чисел, числа с 20-го по 30-й. Подсказка: используйте синтаксис [начало:конец] для получения срезов.
Решения:

Задание 1: Анализ температур

# Создание списка температур
температуры = [22, 25, 23, 27, 24, 26, 21]

# Вычисление статистики
средняя = sum(температуры) / len(температуры)
максимальная = max(температуры)
минимальная = min(температуры)

# Вывод результатов
print(f"Температуры за неделю: {температуры}")
print(f"Средняя температура: {средняя:.2f}°C")
print(f"Максимальная температура: {максимальная}°C")
print(f"Минимальная температура: {минимальная}°C")

Задание 2: Фильтрация данных

import random

# Создание списка случайных чисел
числа = [random.randint(1, 100) for _ in range(15)]
print(f"Исходный список: {числа}")

# Фильтрация четных чисел
четные = [число for число in числа if число % 2 == 0]
print(f"Четные числа: {четные}")
print(f"Количество четных чисел: {len(четные)}")

Задание 3: Управление списком покупок

def добавить_товар(список, товар):
    список.append(товар)
    print(f"Товар '{товар}' добавлен в список")

def удалить_товар(список, товар):
    try:
        список.remove(товар)
        print(f"Товар '{товар}' удален из списка")
    except ValueError:
        print(f"Товар '{товар}' не найден в списке")

def сортировать_список(список):
    список.sort()
    print("Список отсортирован")

def количество_товаров(список):
    return len(список)

# Создание списка покупок
покупки = ["молоко", "хлеб", "яйца", "фрукты", "овощи"]
print(f"Исходный список: {покупки}")

# Добавление товара
добавить_товар(покупки, "мясо")
print(f"Список после добавления: {покупки}")

# Удаление товара
удалить_товар(покупки, "хлеб")
print(f"Список после удаления: {покупки}")

# Сортировка
сортировать_список(покупки)
print(f"Отсортированный список: {покупки}")

# Подсчет товаров
количество = количество_товаров(покупки)
print(f"Количество товаров в списке: {количество}")

Задание 4: Анализ текста

# Ввод предложения
предложение = input("Введите предложение: ")

# Преобразование в список слов
слова = предложение.split()
print(f"Список слов: {слова}")

# Подсчет количества слов
количество = len(слова)
print(f"Количество слов: {количество}")

# Поиск самого длинного слова
самое_длинное = max(слова, key=len)
print(f"Самое длинное слово: '{самое_длинное}' (длина: {len(самое_длинное)})")

Задание 5: Математические операции

def факториал(n):
    if n == 0 or n == 1:
        return 1
    результат = 1
    for i in range(2, n + 1):
        результат *= i
    return результат

# Исходный список чисел
числа = [1, 2, 3, 4, 5]
print(f"Исходные числа: {числа}")

# Вычисление квадратов
квадраты = [x ** 2 for x in числа]
print(f"Квадраты: {квадраты}")

# Вычисление кубов
кубы = [x ** 3 for x in числа]
print(f"Кубы: {кубы}")

# Вычисление факториалов
факториалы = [факториал(x) for x in числа]
print(f"Факториалы: {факториалы}")

Задание 6: Работа с матрицами

def вывести_матрицу(матрица):
    for строка in матрица:
        print(" ".join(map(str, строка)))

def сумма_элементов(матрица):
    return sum(sum(строка) for строка in матрица)

def транспонировать(матрица):
    return [[матрица[i][j] for i in range(len(матрица))] for j in range(len(матрица[0]))]

# Создание матрицы 3x3
матрица = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

print("Исходная матрица:")
вывести_матрицу(матрица)

print(f"Сумма всех элементов: {сумма_элементов(матрица)}")

print("Транспонированная матрица:")
транспонированная = транспонировать(матрица)
вывести_матрицу(транспонированная)

Задание 7: Статистика оценок

# Список оценок студентов
оценки = [5, 4, 3, 5, 2, 4, 5, 3, 4, 5, 2, 5, 4, 3, 5]

# Вычисление среднего балла
средний_балл = sum(оценки) / len(оценки)
print(f"Оценки студентов: {оценки}")
print(f"Средний балл: {средний_балл:.2f}")

# Подсчет отличников (оценка 5)
отличники = [оценка for оценка in оценки if оценка == 5]
print(f"Количество отличников: {len(отличники)}")

# Подсчет неуспевающих (оценка 2)
неуспевающие = [оценка for оценка in оценки if оценка == 2]
print(f"Количество неуспевающих: {len(неуспевающие)}")

Задание 8: Работа с диапазонами

# Создание списка чисел от 1 до 50
числа = list(range(1, 51))
print(f"Полный список: {числа}")

# Первые 10 чисел
первые_10 = числа[:10]
print(f"Первые 10 чисел: {первые_10}")

# Последние 10 чисел
последние_10 = числа[-10:]
print(f"Последние 10 чисел: {последние_10}")

# Числа с 20-го по 30-й (индексы 19-29)
диапазон = числа[19:30]
print(f"Числа с 20-го по 30-й: {диапазон}")
Предыдущий урок Следующий урок