我刚刚注意到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