8

len("".split(" ")) == 1显示 True的 Pythonic 解释是什么?

为什么"".split("")产量['']

>>> len("".split(" "))
1
>>> "".split(" ")
['']
4

4 回答 4

22

str.split(sep)返回至少一个元素。如果在文本中未找到sep ,则该元素是原始的未拆分文本。

对于空字符串,sep定界符当然永远找不到,并且在文档中特别指出:

使用指定的分隔符拆分空字符串会返回['']

None您可能对delimiter 选项(默认)的行为感到困惑:

如果sep未指定或 is None,则应用不同的拆分算法:连续空格的运行被视为单个分隔符,如果字符串具有前导或尾随空格,则结果将在开头或结尾不包含空字符串。因此,使用分隔符拆分空字符串或仅包含空格的字符串会None返回[].

(强调我的)。这就是str.split(None)例外而不是规则。

于 2013-09-09T15:03:11.757 回答
4

[] 的长度为零。如果列表中包含任何内容,任何内容,它的长度都将 >=1 。在这种情况下,[''] 中有一个元素:空字符串。所以它给了一个。

于 2013-09-09T15:04:20.940 回答
2

这可能是相关的:

为什么 split() 结果中返回空字符串?

split() 被设计为与 join() 相反,并且:

" ".join([""]) == ""
于 2013-09-09T15:03:30.563 回答
0

它告诉您生成的列表的长度,而不是字符串的长度。

于 2013-09-09T15:04:05.580 回答