|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 若习~岚 于 2021-2-18 09:46 编辑
.split()
str.split(sep=None, maxsplit=-1)
.split()的功能就是以sep为分隔符,把字符串分解成若干个单词元素并以列表的形式返回该字符串(但并不会直接修改原字符串)
sep是分隔符,如果sep=None,则文件中所有的空白字符会被视为分隔符,当sep被指定时,连续的分隔符不会被视为一个,而是作为空白字符串的边界。让我来举个栗子:
i = "1;2;;3"
i.split(sep=";")
返回的值为:当字符串的开头和结尾出现分隔符时,情况又不一样了。再为大家举几个栗子(分隔符统一使用分号,其余字符应该也一样):
>>> i = ";1;;2;;;3;;;"
>>> i.split(";")
['', '1', '', '2', '', '', '3', '', '', '']
>>> i = ";;1;;;2;3;"
>>> i.split(";")
['', '', '1', '', '', '2', '3', '']
>>> i = ";;;;;;"
>>> i.split(";")
['', '', '', '', '', '', '']
怎么样?是不是看懵了,没事我当时也很懵。
首先我提出一条规律,之后再逐个解释:
在字符串前后各有空字符,除分隔符外的其他字符(包括字符串前后的空字符串)之间存在一段(没错我是这样认为的)空白字符串(几个不用管)。python文档中给出的解释如下:
如果给出了sep,则连续的分隔符不会被组合在一起而是被视为分隔空字符串(真不是人话啊)
If sep is given, consecutive delimiters are not grouped together and are deemed to delimit empty strings
由于空白字符串在源字符串中即使拥有无数个也不会占据任何位置,所以这条规律帮助理解就好,至于具体的什么机制,我也不懂( ̄y▽, ̄)╭
- 在例1中,第一个;把字符串前面的空字符串和“1”分开,空字符串自己单独成为一个元素。“1;;2”最终变为 ['1', '', '2'] 有两种理解方法:
- 我的理解:1 和 2 中间的空字符串被两个;拆分为三份,前后的两个空字符串和 1、2 合并,中间的空字符串不会被“吸附”。
- ;;围起了一个空字符串,这个同时他们发挥了作为分隔符的作用,将 1 和 2 分离
末尾的情况则是 3 后面第一个;将 3 和字符串末尾的空字符串分隔开,之后的两个;将空字符串分为三份
- 在例2中,开头的第二个;把开头的空字符串和 1 分割开,第一个;把空字符串分为两份。
1 和 2 之间的情况同例1,2 和 3 之间的;真正发挥了自己分隔符的作用——它将 2 和 3 分开
3后面的;将 3 和后面的空字符串分开
开头、中间、末尾共三个空白字符串,被第一个;和最后一个;将三个空字符串分开,中间的空字符串被剩余的四个;分割为五段
如图:
顺带一提,sep可以是不止一个字符。
maxsplit限制分割的次数,也就意味着当maxsplit被指定时,返回的列表中最多会有(maxsplit + 1)的元素,当maxsplit不被指定时或为-1时,分割次数将不会被限制
使用 None 拆分空字符串
或仅包含空格的字符串将返回 []
|
|