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

Мини-проект — перестановка имени и фамилии

Собираем split(), распаковку и строки из главы 8 в одной короткой, но полезной программе — и подводим полные итоги главы.

Финальный мини-проект главы: разбить полное имя на части и собрать заново в другом порядке — «Фамилия Имя» вместо «Имя Фамилия», используя методы строк из главы 8 и списки из этой главы.

perestanovka_imeni.py
full_name = input("Введите имя и фамилию через пробел: ")
parts = full_name.split()   # split() возвращает список
name, surname = parts        # распаковка, как у кортежей

print(f"{surname} {name}")
split() возвращает список
Мы видели .split() в главе 8, но не заостряли внимание на том, что результат — это именно list. Теперь, зная про списки, можно распаковывать его так же, как распаковывали кортежи в §11.13.
★★★ Задача повышенной сложности
Три части имени

Обработайте случай с отчеством (три слова): «Имя Отчество Фамилия» → «Фамилия И.О.» с инициалами.

Практика: перестановка имени и фамилии
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →

Итоги главы

Итоговый инструментарий главы 11
Нужна пара «ключ → значение»?
dict
Нужны только уникальные значения, порядок не важен?
set
Нужен порядок, значения точно не изменятся?
tuple
Нужен порядок, и придётся менять содержимое?
list
Нужен неизменяемый набор уникальных значений?
frozenset
Нужны позиция и значение вместе при переборе?
enumerate(...)
Нужно перебрать несколько коллекций попарно?
zip(...)
Нужна новая коллекция, преобразованная из старой?
comprehension
Нужна независимая внешняя копия?
.copy() / list(...) / [:]
Нужна полностью независимая копия вложенных структур?
copy.deepcopy(...) — с осторожностью
Полная версия этой карты выбора — в §11.22

Что мы узнали в этой главе

  • Список (list) — упорядоченная, изменяемая коллекция в []: индексы, срезы, append/extend/insert, remove/pop/clear.
  • Кортеж (tuple) — как список, но неизменяемый, в (): packing/unpacking, звёздочная распаковка, кортеж из одного элемента требует запятой.
  • Множество (set) — уникальные значения без позиций, в {} (но {} без содержимого — это dict, а не set!): union/intersection/difference/symmetric_difference.
  • Словарь (dict) — пары «ключ: значение», сохраняет порядок вставки, доступ по ключу, а не по позиции.
  • b = a для изменяемых объектов создаёт ВТОРОЕ ИМЯ того же объекта (aliasing), а не копию — для копии нужен .copy(), а для вложенных структур — copy.deepcopy().
  • Хешируемыми (и годными в качестве ключей словаря или элементов множества) бывают только неизменяемые типы: числа, строки, кортежи из хешируемых элементов, frozenset.
  • Генератор списков [выражение for элемент in коллекция] — компактная альтернатива циклу с append(), но не замена циклу везде, где нужна более сложная логика.
  • Выбор структуры данных — это в первую очередь вопрос к задаче («нужен ли порядок?», «нужны ли уникальные значения?», «нужен ли ключ?»), а не вопрос синтаксиса.