Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python IndexError:タプルインデックスが範囲外です解決策

リストと同様に、Pythonタプルにはインデックスが付けられます。これは、タプルの各値に、その値にアクセスするために使用できる番号があることを意味します。存在しないタプル内のアイテムにアクセスしようとすると、Pythonは「タプルインデックスが範囲外です」というエラーを返します。

このガイドでは、この一般的なPythonエラーの意味と、エラーが発生する理由について説明します。この問題を解決する方法を理解できるように、この問題が存在するシナリオの例を見ていきます。

問題分析:IndexError:タプルインデックスが範囲外です

タプルには0から始まるインデックスが付けられます。タプル内の後続のすべての値には、最後の値より1つ大きい番号が割り当てられます。タプルを見てください:

birds = ("Robin", "Collared Dove", "Great Tit", "Goldfinch", "Chaffinch")

このタプルには5つの値が含まれています。各値には独自のインデックス番号があります。

ロビン シラコバト シジュウカラ ゴールドフィンチ ズアオアトリ
1 2 3 4

タプルの値「Robin」にアクセスするには、次のコードを使用します。

print(birds[0])

コードは次のようになります:Robin。インデックス位置1の値にアクセスし、コンソールに出力します。これは、リスト内の任意の値で実行できます。

タプルの外にあるアイテムにアクセスしようとすると、エラーが発生します。

参加者の81%は、ブートキャンプに参加した後、自分たちの技術的な仕事の見通しについてより自信を持っていると述べました。今日のブートキャンプにマッチしましょう。

平均的なブートキャンプの卒業生は、ブートキャンプの開始から最初の仕事を見つけるまで、キャリアの移行に6か月も費やしませんでした。

シナリオ例

タプルの最後の3つの値を出力するプログラムを書いてみましょう。タプルには、英国の都市のリストが含まれています。タプルを宣言することから始めましょう:

cities = ("Edinburgh", "London", "Southend", "Bristol", "Cambridge")

次に、最後の3つの値を出力します。これは、forループとrange()を使用して行います。 声明。 range()ステートメントは、特定の範囲の間に番号のリストを作成します。これにより、インデックス番号がその範囲内にあるリスト内のアイテムを反復処理できます。

forループのコードは次のとおりです。

for i in range(3, 6):
	print(birds[i])

コードを実行してみましょう:

Goldfinch
Chaffinch
Traceback (most recent call last):
  File "main.py", line 4, in <module>
	print(birds[i])
IndexError: tuple index out of range

私たちのコードは、GoldfinchとChaffinchの値を出力します。これらは、リストの最後の2つの値です。 3番目の値は出力されません。

ソリューション

range() ステートメントは、3から6の範囲の数値のリストを作成します。このリストには3が含まれ、6は含まれません。リストは4までしかインデックス付けされません。これは、ループがインデックス位置5の鳥にアクセスしようとすることを意味します。 5が範囲内にあるため、タプル内にあります。

鳥[5]を個別に印刷しようとするとどうなるか見てみましょう。

print(birds[5])

私たちのコードは次を返します:

Traceback (most recent call last):
  File "main.py", line 3, in <module>
	print(birds[5])
IndexError: tuple index out of range

同じエラーが存在します。これは、リスト内のアイテムに1からインデックス付けされているかのようにアクセスしようとするためです。タプルは0からインデックス付けされます。

このエラーを解決するには、range()を修正する必要があります ステートメントなので、タプルの最後の3つの項目のみを出力します。私たちの範囲は2から5まで行く必要があります:

for i in range(2, 5):
	print(birds[i])

改訂されたコードを実行して、何が起こるか見てみましょう:

Great Tit
Goldfinch
Chaffinch

コードは、リストの最後の3つの項目を正常に出力します。現在、インデックス位置2、3、および4のアイテムにアクセスしています。これらの位置はすべて有効であるため、コードが機能するようになりました。

結論

IndexError:存在しないタプル内のアイテムにアクセスしようとすると、タプルインデックスの範囲外エラーが発生します。この問題を解決するには、タプルからアイテムにアクセスするときは常に、探しているアイテムが存在することを確認してください。

このエラーの最も一般的な原因は、タプルが0からインデックス付けされていることを忘れていることです。タプルから値にアクセスしようとしているときは、0からカウントを開始します。初心者として、これは奇妙に感じるかもしれません。 Pythonでのコーディングにより多くの時間を費やすと、0から数えることは第二の性質になります。

これで、エキスパートのようにこのPythonエラーを解決する準備が整いました!


  1. Pythonでタプルにインデックスを付けてスライスする方法は?

    タプルにインデックスを付けたりスライスしたりするには、タプルで[]演算子を使用する必要があります。タプルにインデックスを付けるときに正の整数を指定すると、左から数えてタプルからそのインデックスがフェッチされます。負のインデックスの場合、右から数えてタプルからそのインデックスをフェッチします。 例 my_tuple = ('a', 'b', 'c', 'd') print(my_tuple[1]) print(my_tuple[-1]) 出力 これにより、出力が得られます- b d タプルの一部を取得する場合は、スライス演算子を

  2. 範囲外の部分文字列スライスインデックスがPythonで機能するのはなぜですか?

    シーケンスの境界の外側でスライスしても(少なくともビルトインの場合)、エラーは発生しません。インデックス付けは単一のアイテムを返しますが、スライスはアイテムのサブシーケンスを返します。したがって、存在しない値にインデックスを付けようとすると、何も返されません。ただし、シーケンスを境界外にスライスした場合でも、空のシーケンスを返すことができます。例: >>> s = [1, 2, 3] >>> s[5:8] [] ただし、範囲外のインデックスを使用すると、エラーが発生します: >>> s = [1, 2, 3] >>> s