[英]is python str.split() inconsistent?
>>> ".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']
當被調用的字符串只有空格作為空格時,為什么split()
與split(' ')
split()
不同?
為什么split('.')
將"..."
拆分為['','']
? split()
不考慮2個分隔符之間的空字......
文檔對此很清楚(參見下面的@agf),但我想知道為什么這是選擇的行為。
我查看了源代碼( 這里 ),思路136應該小於:... i < str_len
...
請參閱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()
返回
['1', '2', '3', '4']
考慮分割使用空格而不是制表符來創建固定寬度列的數據 - 如果數據寬度不同,則每行中將有不同數量的空格。
在一行的末尾經常有一些你看不到的尾隨空格,默認也忽略它 - 它給你你在視覺上期望的答案。
對於指定分隔符時使用的算法,請考慮CSV文件中的行:
1,,3
表示第1列和第3列中有數據,第2列中沒有數據,因此您需要
'1,,3'.split(',')
返回
['1', '', '3']
否則你將無法分辨每個字符串來自哪個列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.