Разбор: strip + split + join в Python

Разбор: strip + split + join в Python

@python_quiz

Разберем этот квиз

У нас есть короткий фрагмент кода на Python, который обрабатывает строку с лишними запятыми и пробелами. Разберём, что делает каждая часть и почему итоговый вывод получается именно таким.

Исходный код

python

Пошаговый разбор

  1. text.strip()

- Убирает пробелы в начале и в конце строки.
- Исходная строка ' ,a,,b, ,c, ' превращается в ',a,,b, ,c,'.

  1. .split(',')

- Разбивает строку по символу запятая.
- Результат — список элементов (включая пустые строки): ['', 'a', '', 'b', ' ', 'c', ''].

  1. Генератор (p.strip() for p in parts if p.strip())

- p.strip() убирает пробелы внутри каждого фрагмента (например, ' ' → '').
- Условие if p.strip() фильтрует элементы, которые после strip() стали пустыми — такие отбрасываются.
- Для нашего списка остаются элементы: 'a', 'b', 'c'.

  1. '|'.join(...)

- Соединяет оставшиеся элементы через вертикальную черту.
- Итоговая строка: 'a|b|c'.

Промежуточный вывод (демонстрация)

Чтобы было нагляднее, можно вывести промежуточные значения:

python

Ожидаемый вывод:

Анализ предлагаемых вариантов

Рассмотрим, как каждый вариант соотносится с результатом выполнения кода:

  • "|a||b||c|"

- Имеет внешние разделители и двойные разделители между элементами — это выглядело бы как если бы пустые элементы между значениями не были отфильтрованы и были сохранены, но в нашем случае пустые элементы удаляются.

  • "a|b|c"

- Полностью соответствует тому, что получается после удаления пустых фрагментов и соединения через '|'.

  • "a||b| |c"

- Содержит двойной разделитель между a и b и пробел перед c — это предполагает, что некоторые пустые или пробельные элементы остались необработанными. Но p.strip() вместе с if p.strip() удаляет такие элементы.

  • " |a|b|c| "

- Содержит пробелы и внешние '|' — такого вывода не будет, потому что strip() убирает внешние пробелы, а join не добавляет лишних внешних разделителей.

Альтернативные варианты записи

Тот же результат можно получить чуть иначе, сохраняя читаемость:

python

Или с использованием map + filter:

python

Выводы и советы

  • split(',') создаёт пустые строки для соседних разделителей и для разделителей у краёв строки. Если нужно удалить такие элементы — отфильтруйте их.
  • p.strip() одновременно очищает пробелы внутри фрагмента и позволяет отфильтровать фрагменты, ставшие пустыми.
  • Для компактного кода подойдёт выражение с генератором в join или сочетание map + filter.
  • Если требуется учитывать случаи с произвольными пробелами и несколькими видами разделителей, рассмотрите регулярные выражения (re.split).

Report Page