1

重複
の可能性: Python Slice Notation

Python のサブシーケンス選択の仕組みに混乱しています。次のコードがあるとします。

>>> t = 'hi'
>>> t[:3]
'hi'
>>> t[3:]
''
>>> print t[:3] + t[3:]
hi
>>> print t[3]

Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
print t[3]
IndexError: string index out of range

これがPythonでどのように機能するかを説明してください

4

3 に答える 3

2

私はいつも、範囲外のスライスを許可するシーケンスの動作がややおかしいと感じています。ただし、これは文書化されています。具体的には、シーケンス型のスライスについて説明している箇条書き 4:

i から j までの s のスライスは、i <= k < j であるようなインデックス k を持つアイテムのシーケンスとして定義されます。i または j が len(s) より大きい場合は、len(s) を使用します。i が省略または None の場合は 0 を使用します。j が省略または None の場合は、len(s) を使用します。i が j 以上の場合、スライスは空です。

または、オプションの stride パラメータを使用したスライスについて説明する箇条書き 5:

ステップ k を使用した i から j までの s のスライスは、0 <= n < (ji)/k を満たすインデックス x = i + n*k を持つアイテムのシーケンスとして定義されます。つまり、インデックスは i、i+k、i+2*k、i+3*k などであり、j に達すると停止します (ただし、j は含まれません)。i または j が len(s) より大きい場合は、len(s) を使用します。i または j が省略されるか None の場合、それらは「終了」値になります (終了は k の符号に依存します)。k をゼロにすることはできません。k が None の場合、1 のように扱われます

ポイント 3 ( を説明s[index]) を見ると、境界外インデックスから境界内インデックスへの対応する変換がないことに注意してください。

于 2013-01-31T14:10:06.960 に答える
2

サブシーケンス、またはスライスの表記法は寛大です。 は、最初から最後までt[:3]のスライスを取得するか、3 番目の要素のいずれか先に来る方を取得し、3 番目の要素が最後まで存在する場合は、3 番目の要素からのスライスを取得します。などの直接索引付けは許容されません。インデックス付きの要素が存在する必要があります。存在しない場合、例外が発生します。スライスでは、終了インデックスが範囲外の場合は元のリスト全体が取得され、開始インデックスが範囲外の場合は空のリストが取得されます。tt[3:]tt[3]

于 2013-01-31T14:05:18.167 に答える
1

t[start:stop]start <= x < stop ですべての要素 x を出力します。一部の要素が存在しない場合、それらは単純に印刷されません。

t[index]一方、指定されたインデックスに要素がない場合はエラーが発生します。

あなたの例では、あなたの結果を説明するt[0]='h'だけです。t[1]='i'

print t[3:]私のpythonインタープリターでもそうです。

于 2013-01-31T14:08:55.037 に答える