Вернуться на главную

Списки

Тема: Типы данных • Урок 4 из 7

Списки в Python

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

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

Списки в Python создаются с помощью квадратных скобок [] или функции list():

# Пустой список
empty_list = []
empty_list2 = list()

# Список с элементами
numbers = [1, 2, 3, 4, 5]

# Список с элементами разных типов
mixed = [1, "Hello", 3.14, True]

# Вложенные списки
nested = [1, 2, [3, 4], 5]

# Создание списка из другой последовательности
chars = list("Python") # ['P', 'y', 't', 'h', 'o', 'n']

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

Как и строки, списки поддерживают индексацию и срезы:

Интерактивный пример

# Создаем список
numbers = [1, 2, 3, 4, 5]
print(numbers)

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

# Доступ по индексу
print(f"Первый элемент: {numbers[0]}")
print(f"Последний элемент: {numbers[-1]}")

# Изменение списка
numbers.append(6) # Добавление элемента в конец
print(numbers)

# Вложенные списки
numbers.append([7, 8]) # Добавление списка как элемента
print(numbers)

# Удаление элемента
numbers.pop(0) # Удаление элемента по индексу
print(numbers)

# Изменение элемента
numbers[1] = 10 # Изменение значения элемента
print(numbers)

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

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

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# Синтаксис среза: list[start:end:step]
print(numbers[2:5]) # [2, 3, 4] (элементы с индексами от 2 до 4)
print(numbers[:5]) # [0, 1, 2, 3, 4] (элементы с начала до индекса 4)
print(numbers[5:]) # [5, 6, 7, 8, 9] (элементы с индекса 5 до конца)
print(numbers[::2]) # [0, 2, 4, 6, 8] (каждый второй элемент)
print(numbers[::-1]) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] (список в обратном порядке)

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

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

fruits = ["яблоко", "банан", "апельсин"]

# Добавление элементов
fruits.append("груша") # Добавляет элемент в конец списка
fruits.insert(1, "виноград") # Вставляет элемент по индексу
fruits.extend(["киви", "ананас"]) # Добавляет элементы из другого списка

# Удаление элементов
fruits.remove("банан") # Удаляет первое вхождение элемента
popped = fruits.pop() # Удаляет и возвращает последний элемент
popped_index = fruits.pop(1) # Удаляет и возвращает элемент по индексу
fruits.clear() # Удаляет все элементы из списка

# Поиск элементов
fruits = ["яблоко", "банан", "апельсин", "банан"]
index = fruits.index("банан") # Возвращает индекс первого вхождения
count = fruits.count("банан") # Возвращает количество вхождений

# Сортировка и изменение порядка
fruits.sort() # Сортирует список на месте
fruits.sort(reverse=True) # Сортирует список в обратном порядке
fruits.reverse() # Изменяет порядок элементов на обратный

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

При работе со списками важно понимать разницу между копированием ссылки и копированием содержимого:

# Копирование ссылки (изменения в одном списке влияют на другой)
a = [1, 2, 3]
b = a
b[0] = 10
print(a) # [10, 2, 3]

# Копирование содержимого (поверхностная копия)
a = [1, 2, 3]
b = a.copy() # или b = a[:] или b = list(a)
b[0] = 10
print(a) # [1, 2, 3]

# Глубокая копия (для вложенных списков)
import copy
a = [1, 2, [3, 4]]
b = copy.deepcopy(a)
b[2][0] = 10
print(a) # [1, 2, [3, 4]]
print(b) # [1, 2, [10, 4]]

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

Списочные включения — это компактный способ создания списков на основе существующих последовательностей:

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

# С условием
even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares) # [0, 4, 16, 36, 64]

# Вложенные циклы
matrix = [[i*j for j in range(1, 4)] for i in range(1, 4)]
print(matrix) # [[1, 2, 3], [2, 4, 6], [3, 6, 9]]
← Предыдущий урокСледующий урок →