[解決済み] Pythonのループ。リストのインデックスが範囲外
2022-03-02 22:28:51
質問
次のようなリストがあるとする。
a = [0, 1, 2, 3]
新しいリストを作成したい
b
の現在値と次の値が一致する要素で構成されます。
a
は合計されます。これには
1
よりも少ない要素
a
.
こんな感じで。
b = [1, 3, 5]
(0+1,1+2,2+3から)
以下は、私が試したものです。
b = []
for i in a:
b.append(a[i + 1] - a[i])
b
困ったことに、このエラーが出続けているのです。
IndexError: list index out of range
これは、aの最後の要素(3)を取得するまでに、その値を何かに足すことができないためだと思います(足すべき3の後の値がない)。そこで、計算のために3を参照しながら、2で停止するようにコードを指示する必要があります。
どのように解決するのですか?
-
あなたの
for
ループの中で、リストの要素を反復しています。a
. しかし、ループの本体では、実際にインデックスが必要なときに、これらの項目を使用してリストのインデックスを作成しています。
もし、リストa
は5つの項目を含み、その中に100という数字があり、forループはそれに到達します。基本的には、リストの100番目の要素を取得しようとします。a
これは明らかに存在しない。この場合IndexError
.
この問題は、代わりにインデックスの範囲に対して反復処理を行うことで解決できます。
for i in range(len(a))
にアクセスし
a
の項目はこんな感じです。
a[i]
. これでエラーになることはありません。
-
ループの本体で、インデックスを作成しているのは
a[i]
のみならずa[i+1]
. ここもエラーの可能性があるところです。もしリストが5つの項目を含んでいて、ポイント1で示したようにそれを繰り返し処理する場合IndexError
. なぜか?なぜならrange(5)
は本来0 1 2 3 4
を取得しようとするので、ループが4になったときにa[5]
という項目があります。Pythonのインデックスは0から始まり、リストには5つの項目があるので、最後の項目はインデックス4となり、そのためa[5]
は、存在しない6番目の要素を取得することを意味します。
この問題を解決するには、以下のように
len(a)
を取得するために、範囲シーケンス
0 1 2 3
. インデックスを使用しているので
i+1
のように、最後の要素を取得することになりますが、この方法でエラーを回避することができます。
- ここでやろうとしていることを実現するには、さまざまな方法があります。中にはリスト内包のような非常にエレガントでよりpythonicなものもあります。
b = [a[i] + a[i+1] for i in range(len(a) - 1)]
これは、たった一行で仕事をこなしてくれます。
関連
-
Python Decorator 練習問題
-
PicgoのイメージベッドツールをPythonで実装する
-
[解決済み] for'ループでインデックスにアクセスする?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] リスト内のアイテムのインデックスを検索する
-
[解決済み] JavaScriptのオブジェクトをループスルーまたは列挙するにはどうすればよいですか?
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
pythonを使ったオフィス自動化コード例
-
python call matlab メソッドの詳細
-
Python jiabaライブラリの使用方法について説明
-
python implement mysql add delete check change サンプルコード
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】Python - "ValueError: not enough values to unpack (expected 2, got 1)" の修正方法 [閉店].
-
[解決済み】ValueError: xとyは同じサイズでなければならない