Списки - это упорядоченные изменяемые коллекции объектов произвольных типов. Списки являются одним из самых универсальных и часто используемых типов данных в Python.
Коллекции в Python - это структуры данных, которые могут содержать несколько элементов. Представьте коллекцию как коробку, в которую можно положить разные предметы.
Списки - это один из видов коллекций, которые имеют следующие характеристики:
Списки можно создавать несколькими способами:
Создание списков в Python имеет несколько вариантов:
Важно: квадратные скобки [] - это специальный синтаксис 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 - предпоследний и так далее.
При работе с индексами важно помнить:
# Список фруктов
фрукты = ["яблоко", "банан", "груша", "апельсин"]
# Доступ к элементам по индексу
print(фрукты[0]) # Вывод: яблоко
print(фрукты[2]) # Вывод: груша
# Отрицательная индексация (с конца)
print(фрукты[-1]) # Вывод: апельсин
print(фрукты[-2]) # Вывод: груша
# Изменение элемента
фрукты[1] = "киви"
print(фрукты) # Вывод: ['яблоко', 'киви', 'груша', 'апельсин']
Срезы позволяют получить подмножество элементов списка.
Срезы - это мощный механизм Python для получения подмножества элементов из последовательности. Представьте срез как "окно", через которое вы видите часть списка.
Синтаксис срезов: [начало:конец:шаг]
Любой из этих параметров может быть опущен, что означает использование значения по умолчанию.
Срезы - это удобный способ работать с частями списков:
# Список чисел
числа = [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] (перевернутый список)
Списки имеют множество встроенных методов для работы с ними:
Методы - это функции, которые "принадлежат" объекту. В случае списков методы позволяют изменять список или получать информацию о нем.
Синтаксис вызова метода: объект.метод(аргументы)
Важно понимать:
Методы списков позволяют выполнять различные операции:
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 есть встроенные функции для работы со списками:
Важно различать встроенные функции и методы:
Например, 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) - это синтаксическая конструкция Python для создания списков на основе существующих списков или других итерируемых объектов.
Преимущества списковых включений:
Синтаксис: [выражение 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: Анализ температур
# Создание списка температур
температуры = [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-й: {диапазон}")