鱼C论坛

 找回密码
 立即注册
查看: 3388|回复: 0

[技术交流] .split()

[复制链接]
发表于 2021-2-18 09:46:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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=";")
返回的值为:
['1', '2', '', '3']
当字符串的开头和结尾出现分隔符时,情况又不一样了。再为大家举几个栗子(分隔符统一使用分号,其余字符应该也一样):
  • >>> 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 和后面的空字符串分开

  • 开头、中间、末尾共三个空白字符串,被第一个和最后一个将三个空字符串分开,中间的空字符串被剩余的四个分割为五段
    如图:
    split()讲解.jpg

    顺带一提,sep可以是不止一个字符。
maxsplit限制分割的次数,也就意味着当maxsplit被指定时,返回的列表中最多会有(maxsplit + 1)的元素,当maxsplit不被指定时或为-1时,分割次数将不会被限制
使用 None 拆分空字符串
或仅包含空格的字符串将返回 []








想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-10 18:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表