我刚注意到,如果第一个字符是分隔符字符串,split
方法会在结果列表中生成一个空字符串。
示例:
>>> s = '/foo/bar/blarg'
>>> s.split('/')
['', 'foo', 'bar', 'blarg']
我希望这能产生:
['foo', 'bar', 'blarg']
为什么这是理想的行为,或者这只是一个错误?
答案 0 :(得分:5)
这是所需的行为,因为否则无法区分"/foo".split("/")
和"foo".split("/')
。
当我使用split并知道我不想要空字符串时,我会使用filter(None, foo.split("/"))
删除它们:
>>> filter(None, "/foo//bar".split("/"))
['foo', 'bar']
答案 1 :(得分:4)
要添加到David的答案中......拆分按给定分隔符分隔字符串的各个部分。必须将空字符串视为有效部分,否则,拆分此类情况也会产生问题:
'//'.split('/')
除['', '', '']
以外,还应该返回什么?
答案 2 :(得分:2)
对比这些例子:
>>> s = '/foo/bar/blarg'
>>> s.split('/')
['', 'foo', 'bar', 'blarg']
VS
>>> s = 'foo/bar/blarg'
>>> s.split('/')
['foo', 'bar', 'blarg']
在列表中添加额外''
意味着您可以区分开头是/
还是字符串
答案 3 :(得分:1)
除了其他答案之外,防止列表开头和结尾处出现空字符串的一种方法是去除前导和尾随/
个字符:
>>> s = '/foo/bar/blarg'
>>> s.strip('/').split('/')
['foo', 'bar', 'blarg']
请注意,如果字符串中间有连续的/
个字符,您仍然会得到一个空字符串。