
[code]

    2d_array = [[0,0,0],[0,0,1],[0,0,0],[0,0,0],[0,0,0]]
    
[/code]

上記のようなリストから最終的に`'(1,2)'`という結果をプリントしたいです。

試しに別のリストを作り上のarrayからそれぞれの要素を追加してから1を探し出し、5番目にあるという結果は得られたのですがそこから(1,2)というにはたどり着けませんでした。  
よろしくお願いします。


CC BY-SA 4.0
2018-06-11T07:42:04.170
44685
2018-06-11T23:48:30.050
2018-06-11T07:49:57.580
3060
28881
question
python python3 array
2次元リストから特定の要素を探し出し、その位置を表示させたい


NumPy
を使ってよければ、[`np.where`](https://docs.scipy.org/doc/numpy-1.13.0/reference/routines.sort.html)
を使って次のように書けます。この方法は目的の要素が入っている場所を全列挙します。

[code]

    >>> import numpy as np
    >>> arr = [[0, 0, 0], [0, 0, 1], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
    >>> ind = np.where(np.array(arr) == 1)
    >>> ind
    (array([1]), array([2]))
    >>> # もしくは:
    ... (ind[0][0], ind[1][0])
    (1, 2)
    
[/code]

生の Python で関数を作るとしたら、たとえば単ににループを使って下のように書けます。こちらは目的の要素が入っている最初の場所を見つけます。

[code]

    >>> def find2d(lst, elem):
    ...     for i, row in enumerate(lst):
    ...         for j, e in enumerate(row):
    ...             if e == elem:
    ...                 return i, j
    ...   return -1, -1  # 目的の要素が無かったときの処理です
    ... 
    >>> arr = [[0, 0, 0], [0, 0, 1], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
    >>> find2d(arr, 1)
    (1, 2)
    
[/code]

ただしどちらの方法も、`True` が要素に入っていると誤検出されるので注意してください (Python3 では `True == 1`
[である](https://stackoverflow.com/q/2764017/5989200)ため)。


CC BY-SA 4.0
2018-06-11T08:22:42.287
44687
2018-06-11T23:48:30.050
2018-06-11T23:48:30.050
19110
19110
44685
answer