2015-10-28 20 views
6

Pythonインタプリタによって実行されると、このコードはどのようにエラーをスローしませんか。Pythonリストの不思議な振る舞い

a = ['A', 'B', 'C'] 
a[20:] = ['D', 'E'] 
print a 

出力は['A', 'B', 'C', 'D', 'E']です。 aには3つの要素しかないので、Pythonが2番目の文にエラーを表示すると思いました。この機能はコーディング中に自然に使用されますか?

+1

これは、 'a [20:]'を読むよりはるかに意味がありません。 'assert ['D'、 'E'] == a [20:]'はここでは失敗します。 – Eric

+1

これは、スライスのインデックス作成の仕方には意味があります。 'a [3:] == a [20:]'から、Cレベ​​ルで内部実装されているため、nullの場合は単に要素を追加するか、選択した範囲を上書きします。 –

+0

@Eric: 'a [20:]'は空のリストを返します。 – tuxtimo

答えて

4

これは、Pythonの仕組みです。スライシング用のPythonでは、境界チェックは行われません。変更可能なオブジェクトなので、リストを展開するだけです。

それはあなたがスライシングとの境界の外に読んでいるときにも興味深いです:

f = a[20:] 

fは空のリストになります。

関連する問題