2011-12-16 74 views
3

我剛剛注意到split方法在結果列表中產生一個空字符串,如果第一個字符是分隔符字符串的話。Python:分裂時的第一個字符

例子:

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

我預計今年生產:

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

是有一些原因,這是可取的行爲,或者是這只是一個錯誤?

+2

我沒有看到這種行爲的任何問題。空蟄仍然是一個字符串。 – yosukesabai 2011-12-16 19:17:21

回答

5

這是所需的行爲,否則將無法區分"/foo".split("/")"foo".split("/')

當我採用分體式,知道我不希望可能爲空字符串,我將使用filter(None, foo.split("/"))將其刪除:

>>> filter(None, "/foo//bar".split("/")) 
['foo', 'bar'] 
2

對比這些例子:

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

VS

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

在列表中有一個額外的''意味着您可以區分是否有一個/在開始或您的字符串或不

4

要添加到大衛的答案...拆分由給定的分隔符分隔字符串的部分。一個空字符串必須考慮的一個有效部分,否則,分裂的情況下這樣也將是有問題的:

'//'.split('/') 

還有什麼要這樣的回報,比其他['', '', '']

1

除了其他的答案,以防止在列表的開頭和結尾空字符串的一種方法是去掉開頭和結尾/字符:

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

注意,你仍然會得到一個空字符串,如果字符串中間有連續的/個字符。