【问题标题】:Why does split() return more elements than split(" ") on same string?为什么 split() 在同一字符串上返回的元素比 split(" ") 多?
【发布时间】:2020-11-27 09:13:29
【问题描述】:

我在同一个string 上使用split()split(" ")。但是为什么split(" ") 返回的元素数量少于split()?我想知道在什么特定的输入情况下会发生这种情况。

【问题讨论】:

  • 欢迎来到 SO。请提供 minimal reproducible example
  • split() 将使用字符串中的所有特殊字符进行拆分。在 split(' ') 中,您指定要分割字符串的字符。

标签: python string split


【解决方案1】:

str.split 带有 None 参数(或者,没有参数)在所有个空白字符上分割,这不限于只是您键入的空格在使用你的空格键。

In [457]: text = 'this\nshould\rhelp\tyou\funderstand'

In [458]: text.split()
Out[458]: ['this', 'should', 'help', 'you', 'understand']

In [459]: text.split(' ')
Out[459]: ['this\nshould\rhelp\tyou\x0cunderstand']

split(None) 分割的所有空白字符列表可以在All the Whitespace Characters? Is it language independent? 找到

【讨论】:

    【解决方案2】:

    如果你在 split() 函数上运行帮助命令,你会看到:

    split(...) S.split([sep [,maxsplit]]) -> 字符串列表

    返回字符串 S 中的单词列表,使用 sep 作为分隔符 细绳。如果给出了 maxsplit,则最多完成 maxsplit 拆分。如果九月 未指定或为无,任何空白字符串都是分隔符并且 从结果中删除空字符串。

    因此 to 之间的区别在于 split() 不指定分隔符将删除空字符串,而带有分隔符的则不会。

    【讨论】:

      【解决方案3】:

      不带参数调用的方法str.split 的行为有些不同。

      首先它被任何空白字符分割。

      'foo bar\nbaz\tmeh'.split() # ['foo', 'bar', 'baz', 'meh']
      

      但它也会从输出列表中删除空字符串。

      ' foo bar '.split(' ') # ['', 'foo', 'bar', '']
      
      ' foo bar '.split() # ['foo', 'bar']
      

      【讨论】:

        【解决方案4】:

        在 Python 中,split 函数在指定的字符串上拆分,否则在空格上拆分(然后您可以像往常一样按索引访问结果列表):

        s = "Hello world! How are you?"
        s.split() 
        Out[9]:['Hello', 'world!', 'How', 'are', 'you?']
        s.split("!")
        Out[10]: ['Hello world', ' How are you?'] 
        s.split("!")[0] 
        Out[11]: 'Hello world' 
        

        【讨论】:

          【解决方案5】:

          根据我自己的经验,最大的困惑来自split() 对空白的不同处理。

          拥有' 'None 之类的分隔符会触发split() 的不同行为。根据Python documentation.

          如果 sep 未指定或为 None,则应用不同的分割算法:连续的空格被视为单个分隔符,如果字符串有前导或尾随,结果将在开头或结尾不包含空字符串空格。

          下面是一个示例,其中示例字符串有一个尾随空格' ',它与第二个split() 中传递的空格相同。因此,此方法的行为有所不同,不是因为某些空白字符不匹配,而是更多的是此方法的设计方式,可能是为了在常见情况下方便,但对于期望 split() 的人来说,它也可能会造成混淆split.

          sample = "a b "
          sample.split()
          >>> ['a', 'b']
          sample.split(' ')
          >>> ['a', 'b', '']
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-01-12
            • 2013-05-14
            • 1970-01-01
            • 2018-03-18
            • 2014-12-14
            相关资源
            最近更新 更多