是python str.split()不一致吗?

ijv*_*rig 3 python whitespace split

>>> ".a string".split('.')
['', 'a string']

>>> "a .string".split('.')
['a ', 'string']

>>> "a string.".split('.')
['a string', '']

>>> "a ... string".split('.')
['a ', '', '', ' string']

>>> "a ..string".split('.')
['a ', '', 'string']

>>> 'this  is a test'.split(' ')
['this', '', 'is', 'a', 'test']

>>> 'this  is a test'.split()
['this', 'is', 'a', 'test']
Run Code Online (Sandbox Code Playgroud)

为什么split()不同于split(' ')被调用的字符串只有空格作为空格?

为什么要split('.')拆分"..."['','']split()不考虑2个分隔符之间的空字......

文档对此很清楚(参见下面的@agf),但我想知道为什么这是选择的行为.

我已查看源代码(此处),思路136应该小于:i < str_len......

agf*_*agf 13

查看str.split文档,具体提到了这种行为:

如果sep给定,则连续分隔符不会组合在一起,并被视为分隔空字符串(例如,'1,,2'.split(',') 返回['1', '', '2']).sep参数可以包含多个字符(例如,'1<>2<>3'.split('<>')返回['1', '2', '3']).返回使用指定分隔符拆分空字符串 [''].

如果sep未指定或是None,则应用不同的拆分算法:连续空格的运行被视为单个分隔符,如果字符串具有前导或尾随空格,则结果将在开头或结尾处不包含空字符串.因此,将空字符串或仅包含空格的字符串与None分隔符分开返回[].

Python试图做你期望的事情.大多数人都不会想太多

'1 2 3 4 '.split() 
Run Code Online (Sandbox Code Playgroud)

回来

['1', '2', '3', '4']
Run Code Online (Sandbox Code Playgroud)

考虑分割使用空格而不是制表符来创建固定宽度列的数据 - 如果数据宽度不同,则每行中将有不同数量的空格.

在一行的末尾经常有一些你看不到的尾随空格,默认也忽略它 - 它给你你在视觉上期望的答案.

对于指定分隔符时使用的算法,请考虑CSV文件中的行:

1,,3
Run Code Online (Sandbox Code Playgroud)

表示第1列和第3列中有数据,第2列中没有数据,因此您需要

'1,,3'.split(',')
Run Code Online (Sandbox Code Playgroud)

回来

['1', '', '3']
Run Code Online (Sandbox Code Playgroud)

否则你将无法分辨每个字符串来自哪个列.