Глава 11 · Очень много информации!

Мощные операции со списками!

Списки изменяемы — у них есть целый набор методов для добавления, удаления, поиска и сортировки.

У списков (в отличие от строк) есть методы, которые изменяют сам список — списки, в отличие от строк, изменяемы (§11.4).

Копирование и добавление

kopirovanie.py
original = [1, 2, 3]
kopiya = original.copy()
kopiya.append(4)
print(original)  # [1, 2, 3] — не изменился
print(kopiya)    # [1, 2, 3, 4]
kopiya = original — это не копия!
kopiya = original создаёт вторую переменную, указывающую на тот же самый список — изменение через одну переменную видно и через другую. Это называется aliasing — подробно разберём в §11.9. Чтобы получить настоящую независимую копию, нужен .copy() (или срез original[:]) — подробности и важный нюанс с вложенными списками в §11.10.

Подсчёт и очистка

podschet.py
chisla = [1, 2, 2, 3, 2]
print(chisla.count(2))   # 3 — сколько раз встречается 2
chisla.clear()
print(chisla)             # [] — список пуст

Конкатенация

konkatenaciya_spiskov.py
a = [1, 2]
b = [3, 4]
print(a + b)   # [1, 2, 3, 4]

Поиск и проверка наличия: in, index(), count()

poisk.py
fruits = ["яблоко", "банан", "вишня"]
print("банан" in fruits)         # True
print(fruits.index("вишня"))      # 2 — индекс элемента

Проверка in — то же логическое выражение из главы 9, только теперь слева не число, а коллекция:

membership_primer.py
allowed_users = ["anna", "oleg", "maria"]
username = "oleg"
if username in allowed_users:
    print("Доступ разрешён")
index() вызывает ValueError, если значения нет
Безопасный порядок — сначала проверить in, потом искать индекс: if value in items: position = items.index(value).

Добавление и удаление элементов

Коротко — подробный разбор с визуальными диаграммами в §11.5 и §11.6:

dobavlenie_udalenie.py
fruits = ["яблоко", "банан"]
fruits.append("вишня")        # добавить в конец
fruits.insert(0, "манго")     # вставить по индексу
print(fruits)

fruits.remove("банан")        # удалить по значению
last = fruits.pop()            # удалить и вернуть последний элемент
print(fruits, last)

sort() мутирует и возвращает None — классическая ловушка

razvorot_sortirovka.py
chisla = [3, 1, 4, 1, 5]
chisla.sort()
print(chisla)      # [1, 1, 3, 4, 5]
chisla.reverse()
print(chisla)      # [5, 4, 3, 1, 1]
sort_none_lovushka.py
chisla = [3, 1, 2]
chisla = chisla.sort()
print(chisla)   # None — а не отсортированный список!
Никогда не пишите x = x.sort()
.sort() сортирует список на месте и возвращает None — это распространённый способ Python показать «я изменил объект, а не создал новый» (тот же принцип, что и у .append()). Присваивание результата обратно в переменную стирает список, заменяя его на None.

sorted() — та же задача, но без мутации

list.sort()sorted(list)
Изменяет исходный список?Да — мутируетНет — не трогает
Что возвращает?Noneновый отсортированный список
sorted_primer.py
chisla = [3, 1, 4, 1, 5]
novyj = sorted(chisla)
print(chisla)   # [3, 1, 4, 1, 5] — не изменился
print(novyj)     # [1, 1, 3, 4, 5]

sorted() умеет и key — по какому свойству сравнивать элементы:

sorted_key.py
names = ["Bob", "Alexandra", "Li"]
print(sorted(names, key=len))   # ['Li', 'Bob', 'Alexandra']
Практика: операции со списками
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →