gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:05:37 26 4
gpt4 key购买 nike

观察以下互动环节:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com