Python разделяет последовательные разделители - PullRequest
11 голосов
/ 25 июня 2011

Метод split по умолчанию в Python обрабатывает последовательные пробелы как один разделитель.Но если указать строку-разделитель, последовательные разделители будут , а не свернуты:

>>> 'aaa'.split('a')
['', '', '', '']

Какой самый простой способ свернуть последовательные разделители?Я знаю, что могу просто удалить пустые строки из списка результатов:

>>> result = 'aaa'.split('a')
>>> result
['', '', '', '']
>>> result = [item for item in result if item]

Но есть ли более удобный способ?

Ответы [ 6 ]

16 голосов
/ 25 июня 2011

Это как можно более кратко:

string = 'aaa'
result = [s for s in string.split('a') if s]

Или вы можете переключиться на регулярные выражения:

string = 'aaa'
result = re.split('a+', string)
10 голосов
/ 25 июня 2011

В качестве разделителя можно использовать регулярное выражение, например:

re.split(pattern, string[, maxsplit=0, flags=0])

С документы .

2 голосов
/ 25 июня 2011

Вы можете использовать регулярные выражения:

re.split(pattern, string[, maxsplit=0, flags=0])

в

re.split('a+', 'aaa')
1 голос
/ 25 июня 2011

Я думаю, что ваше решение совершенно нормально.Вот эквивалентный:

filter(bool, 'aaa'.split('a'))

Вероятно, не так отчетливо, как понимание списка, хотя.

0 голосов
/ 25 июня 2011

Хотя это не совсем то, о чем вы просили, вы можете избавиться от всех неуникальных токенов, используя set:

>>> result
['', '', '']
>>> set(result)
set([''])
0 голосов
/ 25 июня 2011

Нет, более удобного способа нет. Либо вы пишете свою собственную функцию разбиения, либо делаете удаление пустых строк.

Но ваше решение кажется очень ясным и питонным.

...