split() vs split(' ') и strip() в Python — коротко и понятно
@python_quizРазберем этот квиз
Код, который надо проанализировать:

Ниже разберём, что делает каждая строка, почему получаются именно такие результаты, и покажем промежуточные списки, чтобы было очевидно.
Что делает каждая функция
- split() без аргументов:
- Делит по любому whitespace (пробел, таб, перевод строки и т.д.).
- Игнорирует последовательные пробельные символы (сложенные в один разделитель).
- Отбрасывает пустые строки, получающиеся из-за ведущих/конечных пробелов.
- split(' '):
- Делит строго по символу пробела.
- Не объединяет подряд идущие пробелы — между ними появляются пустые строки в результате.
- Если строка начинается или заканчивается пробелом, в списке будут пустые элементы в начале/конце.
- strip():
- Убирает ведущие и конечные пробельные символы, прежде чем вызывать split(' '), поэтому пустых элементов на краях не будет.
Выполнение и промежуточные результаты
Посмотрим на сами списки, которые получаются перед join:

Теперь join с разделителем '-' превращает эти списки в строки:

Пояснения по каждой строке вывода:
- Первая строка: s.split() дал ['a','b','c'] → '-'.join(...) = "a-b-c".
- Вторая строка: s.split(' ') дал пустые элементы для подряд и крайних пробелов → итог: "--a--b-c--" (два дефиса в начале и в конце, двойной дефис между a и b, один между b и c).
- Третья строка: strip() убрал ведущие/концевые пробелы, затем split(' ') дал пустой элемент только между двумя соседними пробелами между a и b → "a--b-c".
Частые ошибки и откуда они берутся
- Ожидание, что split(' ') ведет себя так же, как split() — нет. Главное отличие — как обрабатываются подряд и крайние пробелы.
- Некоторые варианты вывода содержат одиночные дефисы в начале или в конце — такие варианты соответствовали бы ситуациям, где в результате есть ровно одно пустое значение на краях, либо код использует другие методы (например, split(None) или дополнительные strip вызовы). В данном коде исходная строка имеет две пробелы на краях, поэтому при split(' ') будет по два пустых элемента на краях -> по два дефиса при join.
Итог / правила, которые запомнить
- split() (без аргумента) — безопасный способ разбивать по пробельным символам: удаляет лишние пробелы и пустые элементы.
- split(' ') — строгая нарезка по символу пробела, сохраняет пустые строки при подряд и крайних пробелах.
- strip() перед split(' ') убирает пустые элементы, возникшие из-за краевых пробелов.
Эти простые правила помогут предсказать результат любых подобных манипуляций со строками в Python.