Я ожидал пустой список, но я получил:
assert 1 == "".split(/\s+/).size()
а также
assert 0 == "".split().size()
Я ожидал пустой список, но я получил:
assert 1 == "".split(/\s+/).size()
а также
assert 0 == "".split().size()
Может быть, вам следует использовать tokenize()
вместо этого?
assert "".tokenize().size() == 0
assert "foo bar".tokenize() == ['foo', 'bar']
Я только что узнал, что Java и Python String.split()
также следуют этому шаблону. Оформить заказ http://docs.python.org/2/library/stdtypes.html#str.split.
Вопрос SO Когда разбивая пустую строку в Python, почему split() возвращает пустой список, а split('\n') возвращает ['']? также содержит обязательные для чтения ответы.
Ответ с наибольшим количеством голосов объясняет:
str.split() метод имеет два алгоритма. Если аргументы не указаны, он разбивается на повторяющиеся прогоны пробелов. Однако, если указан аргумент, он обрабатывается как один разделитель без повторных запусков.
В случае разбиения пустой строки первый режим (без аргумента) вернет пустой список, потому что пробелы съедены и нет значений, которые можно было бы поместить в список результатов.
Напротив, второй режим (с таким аргументом, как
\n
) создаст первое пустое поле. Учтите, что если бы вы написали'\n'.split('\n')
, вы бы получили два поля (одно разбиение дает вам две половины).