python - Python 字符串中出现意外的空字符串

标签 python string python-2.7

观察以下互动环节:

In [1]: s = 'emptiness'

In [2]: s.replace('', '*')
Out[2]: '*e*m*p*t*i*n*e*s*s*'

In [3]: s.count('')
Out[3]: 10

我今天发现了这一点,这让我有点困惑和惊讶。

我喜欢学习有关 Python 的此类知识,但这似乎会导致一些非常令人困惑的问题。例如,如果空字符串作为变量传入,而只是碰巧 是一个空字符串,您可能会得到一些令人惊讶的结果。该行为似乎也有点不一致,因为基于上面的交互式 session ,我认为以下会生成字符串中所有字符的列表(类似于 JavaScript 行为)。相反,你会得到一个错误:

In [4]: s.split('')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-4-c31bd2432bc1> in <module>()
----> 1 s.split('')

ValueError: empty separator

此外,这会导致 str.endswith()str.startswith() 出现一些看似矛盾的行为:

In [5]: s.endswith('')
Out[5]: True

In [6]: s.endswith('s')
Out[6]: True

In [7]: s.startswith('')
Out[7]: True

In [8]: s.startswith('e')
Out[8]: True

试验各种 string methods ,你可以找到更多类似的奇怪例子。

我的问题是为什么空字符串会这样?或者这是 str 方法处理空字符串的结果?如果有人有任何见解,或者可以指出我对这种行为的解释/描述的方向,那就太棒了。

最佳答案

Python 字符串遵循空字符串是所有其他字符串的子集的原则。此外,python 字符串也是字节串的串联,这意味着字符串由夹在空字符串之间的字节组成。您可以通过以下示例看到这一点:

>>>'a'.count('')
2
>>>'aa'.count('')
3
>>>'string'.count('')
7

所以'a'一定是''+'a'+'''aa'一定是' '+'a'+''+'a'+''

当您检查 'a'.startswith('') 时,它会发现字符串 'a' 在技术上以空字符串开头。与 'a'.endswith('') 相同。但是,当您检查 'a'.startswith('a') 时,它会忽略空字符串并查看第一个字节。

关于python - Python 字符串中出现意外的空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43359095/

相关文章:

python - OpenAI 将自定义游戏集成到健身房环境中

python - 在 Jupyter Notebook 中导入期间找不到模块

java - 在数组中查找 Char,如果不存在则添加到新的 String 数组中

python - Pandas-如何消除索引中的尾随空格

Python - 无效的 JSON 格式 - 如何解析

Python在Excel内容中保存所需的行

python-2.7 - 如何使用 itertool 进行列相交

python - 我需要什么下载文件才能获取适用于 Python 3.2 的 PyODBC 3.1.1?

python - 将 XML 文件解析为 Python 对象

javascript - 如何在 JavaScript 中构建/连接字符串?