Глава 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, без установки