我剛剛注意到split
方法在結果列表中產生一個空字符串,如果第一個字符是分隔符字符串的話。Python:分裂時的第一個字符
例子:
>>> s = '/foo/bar/blarg'
>>> s.split('/')
['', 'foo', 'bar', 'blarg']
我預計今年生產:
['foo', 'bar', 'blarg']
是有一些原因,這是可取的行爲,或者是這只是一個錯誤?
我剛剛注意到split
方法在結果列表中產生一個空字符串,如果第一個字符是分隔符字符串的話。Python:分裂時的第一個字符
例子:
>>> s = '/foo/bar/blarg'
>>> s.split('/')
['', 'foo', 'bar', 'blarg']
我預計今年生產:
['foo', 'bar', 'blarg']
是有一些原因,這是可取的行爲,或者是這只是一個錯誤?
這是所需的行爲,否則將無法區分"/foo".split("/")
和"foo".split("/')
。
當我採用分體式,知道我不希望可能爲空字符串,我將使用filter(None, foo.split("/"))
將其刪除:
>>> filter(None, "/foo//bar".split("/"))
['foo', 'bar']
對比這些例子:
>>> s = '/foo/bar/blarg'
>>> s.split('/')
['', 'foo', 'bar', 'blarg']
VS
>>> s = 'foo/bar/blarg'
>>> s.split('/')
['foo', 'bar', 'blarg']
在列表中有一個額外的''
意味着您可以區分是否有一個/
在開始或您的字符串或不
要添加到大衛的答案...拆分由給定的分隔符分隔字符串的部分。一個空字符串必須考慮的一個有效部分,否則,分裂的情況下這樣也將是有問題的:
'//'.split('/')
還有什麼要這樣的回報,比其他['', '', '']
?
除了其他的答案,以防止在列表的開頭和結尾空字符串的一種方法是去掉開頭和結尾/
字符:
>>> s = '/foo/bar/blarg'
>>> s.strip('/').split('/')
['foo', 'bar', 'blarg']
注意,你仍然會得到一個空字符串,如果字符串中間有連續的/
個字符。
我沒有看到這種行爲的任何問題。空蟄仍然是一個字符串。 – yosukesabai 2011-12-16 19:17:21