Python: первый символ при разделении - PullRequest
3 голосов
/ 16 декабря 2011

Я только что заметил, что метод split создает пустую строку в списке результатов, если первый символ является строкой-разделителем.

Пример:

>>> s = '/foo/bar/blarg'
>>> s.split('/')
['', 'foo', 'bar', 'blarg']

Я ожидал, что это произведет:

['foo', 'bar', 'blarg']

Есть ли какая-то причина, почему это желаемое поведение, или это просто ошибка?

Ответы [ 4 ]

5 голосов
/ 16 декабря 2011

Это желаемое поведение, потому что иначе было бы невозможно различить "/foo".split("/") и "foo".split("/').

Когда я использую split и знаю, что я не хочу пустых строк, я буду использовать filter(None, foo.split("/")) для их удаления:

>>> filter(None, "/foo//bar".split("/"))
['foo', 'bar']
4 голосов
/ 16 декабря 2011

Чтобы добавить к ответу Дэвида ... split разделяет разделы строки по заданному разделителю.пустая строка должна считаться допустимым разделом, в противном случае разделение таких случаев также может быть проблематичным:

'//'.split('/')

Что еще должно это вернуть, кроме ['', '', '']?

2 голосов
/ 16 декабря 2011

Сравните эти примеры:

>>> s = '/foo/bar/blarg'
>>> s.split('/')
['', 'foo', 'bar', 'blarg']

против

>>> s = 'foo/bar/blarg'
>>> s.split('/')
['foo', 'bar', 'blarg']

наличие в вашем списке дополнительного '' означает, что вы можете различать, был ли / в начале или вашей строке или нет

1 голос
/ 16 декабря 2011

В дополнение к другим ответам, один из способов предотвратить пустые строки в начале и конце вашего списка - убрать начальные и конечные символы /:

>>> s = '/foo/bar/blarg'
>>> s.strip('/').split('/')
['foo', 'bar', 'blarg']

Обратите внимание, что вы все равнополучить пустую строку, если в середине строки были последовательные / символов.

...