
二重配列のインデックス取得方法を教えてください。
例えば
Python
1arr = ["A","B","C","D"] 2print(arr.index("D"))
とやると、期待通り3と表示されますが、
Python
1arr = [["A","B","C"],["D","E","F"],["G","H","I"]]
のとき、print(arr.index("G"))では当然エラーになります。
期待する"G"のインデックス[2][0]を取得するには、どうすればいいでしょうか?
もしくはindex()メソッド以外の方法でも構いません。
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
0
解決済みではありますが。
python
1import numpy as np 2arr = [["A","B","C"],["D","E","F"],["G","H","I"]] 3arr = np.array(arr) 4print(np.argwhere(arr=="G")) 5# [[2 0]]
投稿2018/03/22 06:00
総合スコア3601
0
ベストアンサー
素直な方法。
Python
1arr = [["A", "B", "C"], ["D", "E", "F"], ["G", "H", "I"]] 2 3for y, row in enumerate(arr): 4 try: 5 pos = (y, row.index("G")) 6 break 7 except ValueError: 8 pass 9 10print(pos)
ちょっと捻った方法。
Python
1from itertools import chain 2 3arr = [["A", "B", "C"], ["D", "E", "F"], ["G", "H", "I"]] 4 5pos = divmod( 6 list(chain(*arr)).index("G"), len(arr[0]) 7) 8print(pos)
内包表記を使った方法。
Python
1arr = [["A", "B", "C"], ["D", "E", "F"], ["G", "H", "I"]] 2 3pos = [ 4 (x, y) for y, row in enumerate(arr) for x, elem in enumerate(row) if arr[x][y] == "G" 5][0] 6print(pos)
NumPyを使うのもアリかもしれませんね。
Python
1import numpy as np 2arr = np.array( 3 [["A", "B", "C"], ["D", "E", "F"], ["G", "H", "I"]] 4) 5 6pos = tuple(nd[0] for nd in np.where(arr == "G")) 7print(pos)
投稿2018/03/22 05:33
編集2018/03/22 05:44総合スコア35676
0
多重かつ要素数が異なる(jagged
)リストで考えてみました。
Python
1 2# srcリストからfind_valに一致する要素位置をidx_findリストに格納して返す 3def search( src, find_val, idx_find, idx_cur = []): 4 if isinstance( src, list): # リストのみで構成されていることが前提 5 for i, v in enumerate(src): 6 search( v, find_val, idx_find, idx_cur + [i]) 7 else: 8 if src == find_val: 9 idx_find.append( idx_cur) 10 11def test( arr): 12 idx_find = [] 13 search( arr, 'G', idx_find) 14 print(idx_find) 15 16# 1つ合致 17test( [['A','B','C'],['D','E','F'],['G','H','I']] ) # [[2, 0]] 18test( ['A',['B',['C','D',['E','F']],'G'],['H','I']] ) # [[1, 2]] 19 20# 2つ合致 21test( [['G','B','C'],['D','E','F'],['G','H','I']] ) # [[0, 0], [2, 0]] 22test( ['G',['B',['C','D',['E','F']],'G'],['H','I']] ) # [[0], [1, 2]]
投稿2018/03/22 07:10
総合スコア38352
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。