Python 3 split () - PullRequest
       9

Python 3 split ()

0 голосов
/ 20 ноября 2018

Когда я разбиваю строку "abac" Я получаю нежелательные результаты.

Пример

print("abac".split("a"))

Почему печатается:

['', 'b', 'c']

вместо

['b', 'c']

Может кто-нибудь объяснить это поведение иподскажите, как получить желаемый результат?

Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 21 ноября 2018

Как указано @ DeepSpace (имеется в виду документы )

Если задано sep, последовательные разделители несгруппированы вместе и считаются разделителями пустых строк (например, '1, 2' .split (',') возвращает ['1', '', '2']).

Поэтому я бы посоветовал использовать лучший разделитель, такой как запятая , или, если это форматирование, с которым вы застряли, вы можете просто использовать встроенную функцию filter(), как предложено в этот ответ, это удалит все «пустые» строки, если передано None как функция.

sample = 'abac'
filtered_sample = filter(None, sample.split('a'))
print(filtered_sample)
#['b', 'c']
0 голосов
/ 21 ноября 2018

В вашем примере, "a" - это то, что называется разделителем.Он действует как граница между персонажами до и после него.Поэтому, когда вы вызываете split, он получает символы до "a" и после "a" и вставляет их в список.Поскольку перед первой "a" в строке "abac" нет ничего, он возвращает пустую строку и вставляет ее в список.

0 голосов
/ 21 ноября 2018

split вернет символы между указанными разделителями (или между концом строки и разделителем), даже если их нет, и в этом случае будет возвращена пустая строка.(См. документацию для получения дополнительной информации.)

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

list(filter(lambda s: len(s) > 0, "abac".split("a"))
0 голосов
/ 21 ноября 2018

Когда вы разделяете строку в Python, вы сохраняете все между разделителями (даже если это пустая строка!)

Например, если у вас был список букв, разделенных запятыми:

>>> "a,b,c,d".split(',')
['a','b','c','d']

Если в вашем списке есть пропущенные значения, вы можете оставить пробел между запятыми:

>>> "a,b,,d".split(',')
['a','b','','d']

Начало и конец строки действуют как сами разделители, так что если у вас есть начальный иликонечный разделитель, вы также получите эту «пустую строку» из основной строки:

>>> "a,b,c,d,,".split(',')
['a','b','c','d','','']

>>> ",a,b,c,d".split(',')
['','a','b','c','d']

Если вы хотите избавиться от любых пустых строк в вашем выводе, вы можете использовать функцию фильтра.

Если вместо этого вы просто хотите избавиться от этого поведения вблизи краев вашей основной строки, вы можете сначала удалить разделители:

>>> ",,a,b,c,d".strip(',')
"a,b,c,d"

>>> ",,a,b,c,d".strip(',').split(',')
['a','b','c','d']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...