簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM