Python split() 方法不仅删除空格

Mos*_*dze 1 python string split python-3.x

在解决一个问题时,我意外地注意到不带任何参数的 Python str.split() 方法不仅删除了最新官方文档中描述的空格,而且还删除了'\n'字符串中任何位置的空格。

例如,假设我想在不带任何参数的情况' a b c d \n '下分割以下字符串.split()。根据官方文档,预期输出如下:['a', 'b', 'c', 'd', '\n'],但是,您得到以下结果: ['a', 'b', 'c', 'd']

无论'\n'是在字符串的结尾、开头还是内部都是如此。

我找不到任何地方提到 的这个属性str.split(),因此我有一个问题:这种行为可靠吗?在任何情况下它总是会做同样的事情,还是只是某种幸运?

我正在运行Python 3.10.8

pax*_*blo 6

您误读了链接到的文档。术语“空白”包括换行符。来自 Python 的文档str.isspace()

如果在 Unicode 字符数据库(请参阅unicodedata)中,某个字符的一般类别是Zs(“分隔符,空格”),或其双向类别是WSB或 之一,则该字符是空白S

Unicode 条目中,您可以看到类别是Cc(控制),但双向类是B(段落分隔符),因此它被上面引用的空白定义覆盖(WS是 Unicode 空白,Python 空白的子集,并且S是段分隔符)。

以下记录显示换行符确实位于该空白类中:

>>> "\n".isspace()
True
Run Code Online (Sandbox Code Playgroud)

完整列表可以通过常量获得string.whitespace

>>> import string
>>> string.whitespace
' \t\n\r\x0b\x0c'
Run Code Online (Sandbox Code Playgroud)

所以它包括空格、制表符、换行符、回车符、垂直制表符和换页符。

  • 要检查 Python 认为什么是空格,您可以向 string 模块询问: `import string` + `string.whitespace` -> `' \t\n\r\x0b\x0c'` (2认同)