Почему split(',') возвращает пустые строки — пример с 'a,b,,c,'
@python_quizРазберем этот квиз
Коротко: при явном указании разделителя в str.split каждое вхождение разделителя разделяет строку, и пустые элементы между соседними разделителями или после последнего разделителя сохраняются. Это объясняет поведение кода в задании.
Условие — код из квиза

Давайте разберёмся, что происходит шаг за шагом.
Разбор строки и логика split
Строка s содержит четыре запятые:
- между 'a' и 'b'
- между 'b' и '' (две запятых подряд)
- между '' и 'c'
- после 'c' (трейлинг-запятая)
Общее правило: если вы вызываете split(sep), то разделитель используется буквально, и пустые подстроки между соседними разделителями и в конце строки не удаляются. При N разделителях получится N+1 частей.
Здесь N = 4 => частей = 5.
Явные части:
- 'a'
- 'b'
- '' (пустая, между ,,)
- 'c'
- '' (пустая, после завершающей запятой)
Поэтому len(parts) == 5, а parts[-1] == '' будет True.
Демонстрация (исполнение)

Вывод этого фрагмента: 5 True (в строке печати показано и содержимое parts).
Почему не другие варианты
- Вариант с длиной 4 ошибается в подсчёте частей: при 4 разделителях должно быть 5 частей.
- Вариант с длиной 5 и ложным значением для проверки последнего элемента неверно оценивает последний элемент: он пустая строка, поэтому проверка равенства с '' возвращает True.
- Вариант с длиной 6 предполагает лишнюю часть — это не соответствует числу разделителей в строке.
Именно сочетание подсчёта частей (разделители + 1) и сохранения пустых подстрок при split(sep) даёт ожидаемый результат.
Что делать, если пустые элементы не нужны
Если вам нужно отбросить пустые строки, есть несколько подходов:
- Фильтрация с помощью list comprehension:

- Использовать filter:

- Если нужно игнорировать только пустые в начале/в конце, можно применять .strip или обрабатывать границы отдельно.
Примеры:

Выбор способа зависит от того, хотите ли вы удалять только пустые строки полностью или, например, сохранять строки, состоящие из пробелов (в этом случае фильтр по truthiness удалит и их).
Вывод
При вызове split с явно указанным разделителем пустые части между соседними разделителями и после завершающего разделителя сохраняются. В рассматриваемом примере получается 5 частей, и последний элемент — пустая строка, поэтому выражение, сравнивающее его с '', даёт True.