2011-12-16 35 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'] 

注意,你仍然会得到一个空字符串,如果字符串中间有连续的/个字符。