Глава 11 · Очень много информации!
Преобразования и comprehensions
От list()/tuple()/set() до компактного способа строить новые коллекции одной строкой — но только после того, как понятен обычный цикл.
Преобразования между коллекциями
preobrazovaniya.py
print(list("Python")) # ['P', 'y', 't', 'h', 'o', 'n']
print(tuple([1, 2, 3])) # (1, 2, 3)
print(set([1, 1, 2, 3])) # {1, 2, 3}
dict() требует пары «ключ, значение»
dict(...) превращает в словарь не любую коллекцию, а только такую, из которой можно собрать пары: например, dict(zip(a, b)) из §11.14. Просто dict([1, 2, 3]) вызовет ошибку.Строка ↔ список — самое частое преобразование
split_join.py
text = "python git linux"
words = text.split()
print(words) # ['python', 'git', 'linux']
print(" ".join(words)) # "python git linux"
sorted() для разных коллекций
sorted_raznoe.py
print(sorted((3, 1, 2))) # [1, 2, 3] — из кортежа
print(sorted({3, 1, 2})) # [1, 2, 3] — из множества
print(sorted({"b": 1, "a": 2})) # ['a', 'b'] — из словаря сортируются КЛЮЧИ
sorted() всегда возвращает список
Независимо от того, что было на входе — кортеж, множество или словарь —
sorted() всегда отдаёт обычный list.List comprehension — уже знакомо, теперь по шагам
comprehension_klassika.py
kvadraty = []
for n in range(1, 6):
kvadraty.append(n ** 2)
print(kvadraty)
comprehension_novyj.py
kvadraty = [n ** 2 for n in range(1, 6)]
print(kvadraty)
Comprehension с условием
comprehension_uslovie.py
chetnye = [n for n in range(10) if n % 2 == 0]
print(chetnye) # [0, 2, 4, 6, 8]
Set и dict comprehension
set_comprehension.py
unikalnye_bukvy = {ch.lower() for ch in "Python"}
print(unikalnye_bukvy)
dict_comprehension.py
kvadraty_slovar = {n: n ** 2 for n in range(5)}
print(kvadraty_slovar) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
Та же идея «источник → выражение → результат», только результат оформляется в фигурных скобках — с двоеточием получаем словарь, без — множество.
Чуть глубже — генераторные выражения
(n ** 2 for n in range(5)) — генераторное выражение, похожее на comprehension, но не строящее список целиком в памяти сразу, а отдающее значения по одному. Пригодится позже, когда будем говорить об итераторах и работе с большими объёмами данных.Сборка списка: цикл vs comprehension
Цикл с append()
kuby = []
for n in range(1, 6):
if n % 2 == 0:
kuby.append(n ** 3)
List comprehension
kuby = [n ** 3 for n in range(1, 6) if n % 2 == 0]
Что использовать сегодня: comprehension для простых преобразований и фильтров — короче и читается как одна мысль. Но comprehension — это НЕ универсальный инструмент глубокого копирования и не заменяет цикл, если внутри нужны побочные эффекты (print, запись в файл, несколько условий с разной логикой) — тогда обычный цикл с append() читается понятнее.
Практика: преобразования и comprehensions
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки