strip, split и join в Python: как получить неожиданный пробел в конце

strip, split и join в Python: как получить неожиданный пробел в конце

@python_quiz

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

Коротко: один вызов strip(), потом split(',') и затем join('-') — и в результате в конце строки останется пробел. Ниже разберём код по шагам, покажем вывод и проанализируем варианты ответов.

Исходный код

python

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

  1. Исходная строка:

- Содержит два пробела в начале, затем текст с запятыми и в конце один пробел перед закрывающей кавычкой:
" ,a,,b, ,"

  1. text.strip()

- strip() убирает только крайние пробелы (с начала и конца строки).
- После strip() строка станет: ",a,,b, ," — ведущие пробелы и завершающий пробел удалены, но обратите внимание: там всё ещё есть пробел в виде элемента после последней запятой (это не крайний пробел строки, он является частью последнего элемента).

  1. .split(',')

- Разбиение по запятой создаёт список элементов между запятыми.
- При смежных или крайних запятых появляются пустые строки.
- Результат split:
['', 'a', '', 'b', ' '] — последний элемент содержит один пробел (это символ, который был между последней запятой и концом до strip).

  1. '-'.join(parts)

- join вставляет дефис между элементами списка.
- Пустые элементы порождают соседние дефисы.
- Последний элемент — не пустая строка, а строка из одного пробела, поэтому в конце результата окажется пробел.
- Конечная строка: "-a--b- " (обратите внимание на пробел в конце).

Демонстрация с видимым представлением вывода

Чтобы явно увидеть пробел в конце, выведем repr строк:

python

Вывод:

  • Первый print напечатает: -a--b- (последний пробел не видно на экране).
  • Второй print покажет: '-a--b- ' — видно, что в конце есть пробел.

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

Варианты, которые были предложены, отличаются тонко:

  • "-a--b- -" — содержит в конце " -": то есть дефис после пробела; это не совпадает с реальным выводом (в реальном выводе последним символом является пробел, а до него — дефис, но после пробела дефиса нет).
  • "a--b- -" — отсутствует начальный дефис (не соответствует).
  • "-a--b-" — похожо, но лишён завершающего пробела (не совпадает).
  • "None of the above" — если рассматривать точное совпадение символов и пробелов, этот вариант верный, так как ни один из первых трёх точно не повторяет выходную строку с завершающим пробелом.

Важно: визуально отличия могут быть незаметны (пробел на конце не виден), поэтому при подобных задачах лучше всегда сравнивать repr() или выводить длину/коды символов.

Полезные замечания и способы обработки

  • Чтобы убрать пустые элементы после split, можно отфильтровать список:
python
  • Если нужно избавиться от пробелов внутри элементов:
python
  • Если требуется убрать финальный пробел в последнем элементе, можно дополнительно rstrip():
python
  • Для наглядной отладки строк используйте repr() или модуль pprint.

Вывод

Комбинация strip(), split(',') и join('-') даёт неожиданный результат из‑за пустых элементов при split и наличия элемента, состоящего из пробела. Всегда проверяйте, какие элементы появляются после split, особенно при работе с разделителями рядом друг с другом или с пробелами между разделителями.

Report Page