6

このリストに10個の要素がある場合:

>>> l = [1,2,3,4,5,6,7,8,9,0]

l [10]がIndexErrorを返すのに、l [-1]が0を返すのはなぜですか?

>>> l[10]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> l[0]
1
>>> l[-1]
0
>>> l[-2]
9

リストに前の要素がない場合、私がしたいのはエラーをスローすることです。

4

4 に答える 4

21

Pythonでは、負のリストインデックスは、リストの右側からカウントされたアイテムを示します(つまり、のl[-n]省略形ですl[len(l)-n])。

エラーを示すために負のインデックスが必要な場合は、そのケースをチェックして、自分で例外を発生させる(またはその場で処理する)ことができます。

index = get_some_index()
if index < 0:
    raise IndexError("negative list indices are considered out of range")
do_something(l[index])
于 2012-06-27T21:43:02.850 に答える
2

l[-1]等しいためl[len(l)-1]、同様にl[-2]に等しいl[len(l)-2]

>>> lis=[1,2,3,4,5]
>>> lis[-1],lis[-2],lis[-3]
(5, 4, 3)
>>> lis[len(lis)-1],lis[len(lis)-2],lis[len(lis)-3]
(5, 4, 3)
于 2012-06-27T21:43:39.247 に答える
1

Q:なぜをl[10]返すのにIndexError、をl[-1]返すの0ですか?

A:Pythonのインデックス値は(他の多くの言語と同様に)ゼロベースであるためです。つまり、最初のアイテムはインデックスに保存されます0

あなたのリスト

l = [1,2,3,4,5,6,7,8,9,0]

10アイテムあります。インデックスはで始まるので0、最後のアイテムはインデックスになります9。インデックスでリストにアクセスしようとすると10、Pythonは正しくIndexError例外をスローして、これは有効なインデックス値ではなく、範囲外であることを通知します。

Pythonはまた、負のインデックス値の規則を使用して、リストまたはシーケンスの「終わり」からアイテムにアクセスします。インデックス値-1は、リストの最後の-2アイテム、最後から2番目のアイテムなどを示します。リストの最後のアイテムはであるため0、これがl[-1]返されます。

@Lattywareの回答は、例外を生成/スローする方法をすでに示しています。これが最初の質問に回答することを願っています。

于 2012-06-27T22:15:58.310 に答える
0

なぜなら、インデックス値は0から始まります。あなたの場合、最後のインデックス値は9であり、9以降のインデックス値はありません。インデックス値の制限を超えて値を出力しようとすると、エラーがスローされる必要があります。

于 2018-04-09T06:27:57.610 に答える