質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

1146閲覧

IndexError: list index out of range

Jetson_Pose

総合スコア1

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/11/11 05:44

編集2021/11/11 07:08

https://github.com/Kazuhito00/mediapipe-python-sample
上記サイトにあるMediaPipeのPythonパッケージのサンプルの中の「sample_hand.py」を編集している最中に問題が発生しました。

「landmarks」という以下のような配列から、2つ目の「landmark」のx座標を取得したいです。こちらの配列は「results.multi_hand_landmarks」をprint関数によって表示した結果です。

Python

1[landmark { 2 x: 0.5555 3 y: 0.4444 4 z: 0.3333 5} 6landmark { 7 x: 0.5555 8 y: 0.4444 9 z: 0.3333 10} 11landmark { 12 x: 0.5555 13 y: 0.4444 14 z: 0.3333 15} 16landmark { 17 x: 0.5555 18 y: 0.4444 19 z: 0.3333 20} 21]

そのため、以下のように指定して2つ目の「landmark」のx座標の取得を試みました。

landmarks[2].x

しかし、IndexError: list index out of rangeというエラーが発生してしまいます。

初歩的な質問となり、申し訳ありませんがどなたかアドバイスお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2021/11/11 06:52

まずは、landmakrsのコードを正しいPython文法で書きましょう。質問はそれからです。
guest

回答3

0

元のコードを拝見していないのですが、
これで2つ目の「landmark」のx座標を取得しています。

sample

1landmarks = [ 2 {"x": 0.5555,"y": 0.4444,"z": 0.3333}, 3 {"x": 0.5555,"y": 0.4444,"z": 0.3333}, 4 {"x": 0.5555,"y": 0.4444,"z": 0.3333}, 5 {"x": 0.5555,"y": 0.4444,"z": 0.3333} 6] 7print(landmarks[1]["x"])

0.5555

投稿2021/11/12 02:29

ekTJ

総合スコア109

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Pythonの添え字は「0」から始まりますので、

2つ目の「landmark」のx座標を取得したい

のあれば添え字は「1」になります。

投稿2021/11/11 11:32

meg_

総合スコア10607

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

enumerate()関数を使って、for文の中でインデックス番号を取り出し、XY座標をタプルに入れたことで取得することができました。

Python

1for index, landmark in enumerate(landmarks.landmark): 2 landmark_x = min(int(landmark.x * image_width), image_width - 1) 3 landmark_y = min(int(landmark.y * image_height), image_height - 1) 4 5 if index == 1: 6 target = (landmark_x, landmark_y) 7 8print(target[0])

投稿2021/11/23 04:25

編集2021/11/23 04:28
Jetson_Pose

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問