2015-02-16 2 views
0

Используя примеры, чтобы продемонстрировать мои сомненияПочему split дает дополнительную пустую строку при расщеплении в python?

example = "$2000" 
example.split("$") 
['', '2000'] 

но если я делать

example2 = "2000$3000" 
example2.split("$") 
['2000', '3000'] 

почему нет дополнительной пустая строка в этом примере?
как раскол работает за сценой?

+0

Это не имеет отношения к вашему вопросу, но в первый раз трудно поверить в ваш первый пример. Разве вы не должны получать '['', '2000']', а не '['', '2000']'? Всегда копируйте и вставляйте транскрипты точно. – DSM

+0

Я думаю, что имеет смысл, что когда вы «разделяете» строку, содержащую один разделитель, вы получаете две части. –

ответ

1

Из документов: https://docs.python.org/2/library/string.html

It (the argument to the function) specifies a string to be used as the word separator. The returned list will then have one more item than the number of non-overlapping occurrences of the separator in the string.

Число вхождений сепаратора в вашем примере 1. Поэтому split возвратит 2 элемента. Первый элемент должен быть пустой строкой, поскольку перед разделителем нет ничего.

Ваш второй пример не содержит пустую строку в возвращаемом результате, потому что 2000 пришел перед разделителем $.

Вы можете думать о функции split как срез строки в элементы массива везде, где происходит разделитель.

2

Поскольку вы разделились на разделитель . Если разделить строку $2000 с $ сепаратором, есть пустая строка слева и 2000 справа:

  $2000 
nothing____/ \____2000 

С вторым случаем 2000$3000, есть еще только один сепаратора, так это все еще производит два значения в массиве. Это просто, что значение слева от сепаратора 2000, а не пустая строка:

 2000$3000 
2000____/ \____3000 

условия, что вы не ограничиваете split, указав максимальное число разделений позволили, размер результирующего массива всегда должен быть больше одной чем число разделителей.

Если вы хотите удалить всех пустых строки из результирующей коллекции, вы можете сделать это с списком пониманием, третий сегмент ниже:

>>> s = '$$$1000$$2000$3000$$$'   # test data 

>>> [x for x in s.split('$') if x != ''] # remove all empty strings 
['1000', '2000', '3000'] 

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

>>> import re 
>>> s='$$$1000$$2000$3000$$$' 

>>> re.sub('^\$|\$$','',s).split('$')   # just one 
['', '', '1000', '', '2000', '3000', '', ''] 

>>> re.sub('^\$*|\$*$','',s).split('$')  # all at the ends 
['1000', '', '2000', '3000'] 
+0

Как насчет этого 're.sub (r '\ $ +'," ", s) .split()' – smac89

Смежные вопросы