8

重複の可能性:
すべての文字列に空の文字列があるのはなぜですか?

空の文字列が文字列に含まれているかどうかを確認するたびに Python が True を返すのはなぜですか。また、そのインデックスがゼロであるのはなぜですか。

例えば:

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

ROT13 関数を書いているときに気付き、テストしたところ、空の文字列で呼び出すと'n'('n'アルファベットでは index13 です) が返されることがわかりました。

4

3 に答える 3

6

それを見る別の方法は、2 つの文字列を見つけることが可能であり、以下が成り立つ場合に返される必要があるx in yということです。Trues1s2

s1 + x + s2 == y

xが空の文字列の場合、常に が返されますTrues1 = ''これは、とを選択できるためですs2 = y

もちろん、 の実際の実装はinこのようには機能しませんが、結果は同じです。その結果をより効率的な方法で取得するだけです。

于 2012-11-21T12:08:31.363 に答える
6

のようなインデックスが存在する場合にのみ、文字列Sは文字列の部分文字列です。あなたが持っている空の文字列はいつなので、すべての結果は正しいです。TiT[i:i+len(S)] == SST[i:i] = '' = S

また、部分文字列が表示される最初のインデックスを返すT.index('')ため、0を返すことに注意してください。これは間違いなく正しい結果です。indexT[0:0] = ''

要約すると、空の文字列はすべての文字列の部分文字列であり、これらすべての結果はこの直接的な結果です。

また、文字列は文字列であり、それ自体が長さ 1 の文字列であるため、これは文字列特有のものであることに注意してください。他の種類のシーケンス ( lists やtuples など) の場合、同じ結果は得られません。

>>> (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

これは、要素が任意の型になる可能性があるため、listメンバーtupleのみをチェックし、サブlistまたはサブをチェックしないためです。tupleケースを想像してみてください((1,2),1,2).index((1,2))。「サブタプルindex」をチェックする (したがって 1 を返す) か、メンバーをチェックする (したがって 0 を返す) か、いくつかの醜い混合 (たとえば、最初にサブタプルをチェックしてからメンバーをチェックする) を行う必要がありますか? Python では、メンバーのみを検索することにしました。これは、より単純であり、通常は必要なものであるためです。サブタプルのみをチェックすると、一般的なケースで非常に奇妙な結果が得られ、「混合」を行うと予測できない結果が生じることがよくあります。

于 2012-11-21T12:10:14.197 に答える
0

まあ、答えは本当に簡単です。あなたが探しているの""は、実際には文字ではありません....

文字列に最初に文字がない場合は、最初の...[0]

[0]これは FIRST 文字のインデックスであると考えてしまうため、混乱を招きます。これは本当ですが、この場合、キャラクター間のセグメントも「具体的な」ものであり、もちろん何もないことも考えなければなりません。文字列のサブセットをチェックする場合は、選択した場所の最初の場所で見つけることができます。

于 2012-11-21T12:10:32.503 に答える