2015-03-10 3 views
3

Может кто-нибудь объяснить это поведение на питон 2.7.8:питон разделить пустую строку

Python 2.7.8 (default, Nov 12 2014, 02:03:09) 
[GCC 4.8.2 20140120 (Red Hat 4.8.2-16)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> a = '' 
>>> a.split() 
[] 
>>> a.split('\n') 
[''] 

раскол любого белого пространства дает пустой список, но разделить на новой линии дает список с пустой строкой. ЗАЧЕМ?

Благодаря

ответ

4

На основе python wiki:

str.split ([[сен, maxsplit]])

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

Если sep не указан или None, другой алгоритм расщепления применяется: пробеги последовательных пробелов рассматриваются как один разделитель, и результат не будет содержать пустые строки в начале или в конце, если строка имеет ведущую или конечный пробел. Следовательно, разделение пустой строки или строки, состоящей из просто пробелов с разделителем None, возвращает [].

Для более подробного объяснения этого ответа слишком https://stackoverflow.com/a/16645307/2867928

+0

ОК, я вижу. Я все еще считаю это запутанным, хотя ... Спасибо. – WeaselFox

+0

@WeaselFox мольбы прочитать вторую часть его очень ясно! я добавлю больше объяснений в ответ! – Kasramvd

1

Предоставление любых символа создаст список:

>>> a = '' 
>>> a.split() 
[] 
>>> a.split(' ') 
[''] 

Независимо от характера. Он ведет себя так, потому что ищет символ, разбивает строку на список и дает элементы списка слева и справа от символа.

>>> a = 'This is a test.' 
>>> a.split('a') 
['This is ', ' test.'] 

Если персонажа не найдено, с обеих сторон персонажа ничего нет.

>>> a = 'Another test string.' 
>>> a.split('*') 
['Another test string.'] 
+1

ОК ... но почему? Я нахожу это странным .. – WeaselFox

+0

Поскольку метод 'split' ищет символ и разбивает строку в этой точке. Поскольку он не может найти его, он возвращает пустую строку. @WeaselFox –

+0

Пожалуйста, проверьте мое обновление; он должен предоставить объяснение и пример поведения 'split'. @WeaselFox –

-3

Когда вы говорите, что python разбивается ('\ n'), он разделяет разные строки. Поэтому возвращаем первую найденную строку, которая ... ''. Если ваш вход имел более одной строки, например: a = line1 \ nline2

он распечатал эти строки.

Редактировать: добавлена ​​\ п между LINE1 и line2, ввести = к \ п

5

из питона str.split документации (https://docs.python.org/2/library/stdtypes.html#str.split):

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

Если Сентябрь не указан или не None, другой алгоритм расщепления применяются: пробеги последовательных пробелов рассматриваются в качестве единого сепаратора, и результат не будет содержать пустые строки в начале или в конце, если строки имеет ведущие или завершающие пробелы. Следовательно, разделяет пустую строку или строку, состоящую только из пробелов с разделителем None возвращает [].

+0

Следует также упомянуть, что последний алгоритм расщепления разбивается на все пробелы, а не просто на пробелы. Это не сразу видно из документации. – will

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