some_string中的empty_string - 总是如此?

时间:2012-11-21 12:06:48

标签: python python-2.7 string

  

可能重复:
  Why empty string is on every string?

我想知道为什么每当我检查空字符串是否在字符串中时Python返回True,以及为什么它的索引为零。

例如:

  • '' in '' =>真
  • ''.index('') => 0
  • '' in 'notEmpty' =>真
  • 'notEmpty'.index('') => 0

我在编写ROT13函数时注意到它并测试它我发现当我在空字符串上调用它时,它返回'n''n'是字母表中的index13。)< / p>

3 个答案:

答案 0 :(得分:6)

另一种看待它的方法是x in y如果有可能找到两个字符串Trues1,那么s2应返回s1 + x + s2 == y

x

True为空字符串时,它将始终为s1 = ''。这是因为您可以选择s2 = yin

当然{{1}}的实际实现并不是这样,但结果是一样的。它只是以更有效的方式获得结果。

答案 1 :(得分:6)

字符串S是字符串T的子字符串,当且仅当存在索引i时才T[i:i+len(S)] == S。当S为空字符串时,您有T[i:i] = '' = S所以所有结果都是正确的。

另请注意,T.index('')返回0,因为index返回子字符串出现的第一个索引,T[0:0] = '',这肯定是正确的结果。

总之,空字符串是每个字符串的子字符串,所有这些结果都是这个结果的直接结果。

另请注意,这是字符串所特有的,因为字符串是字符序列,它们本身就是长度为1的字符串。对于其他类型的序列(例如list s或tuple s),您得不到相同的结果:

>>> (1,2,3).index(())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: tuple.index(x): x not in tuple
>>> [1,2,3].index([1,2])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: [1, 2] is not in list
>>> [] in [1,2,3]
False

这是因为listtuple只检查成员,而不是子list或子tuple,因为它们的元素可以是任意类型。 想象一下案例((1,2),1,2).index((1,2))。应该index检查“子元组”(并因此返回1),对于成员(并因此返回0)或做一些丑陋的混合(例如,首先检查子元组然后检查成员)?在python中,它决定只搜索成员,因为它更简单,通常是你想要的。检查子元组只会在一般情况下给出非常奇怪的结果,而“混合”通常会产生不可预测的结果。

答案 2 :(得分:0)

嗯,答案很简单。你正在寻找""哪个真的,根本不是一个角色......

并且第一次字符串中没有字符时,就在开头... [0]

它会让人感到困惑,因为您会认为[0]是FIRST字符的索引。这是事实,但你必须认为,在这种情况下,人物之间的片段也是“有形的”,因此当然没有任何东西,它也没有。如果您要查看字符串的子集,您可以在第一个位置找到它。