LoginSignup
50
26

More than 3 years have passed since last update.

pythonのリストにリスト(タプル)型の添え字が振られていて困っている人へ

Last updated at Posted at 2018-01-21

インデックスがタプルになっている配列を見つけた

機械学習を始めた初期のころに非常に困らされた割には当時Webで調べても答えが見つからなかったので共有します。

Pythonの標準機能であるリストでは

list
>>> list = [1,2,3,4] 
>>> print(list)
[1, 2, 3, 4]
#リストをそのまま表示
>>> print(list[2])
3
#リストの3番目の要素を表示

となります。当たり前ですね。二次元配列にしたい場合は

two_dimensional_list
>>> list_list = [[1,2],[3,4],[5,6]]
#二次元配列の作成
>>> print(list_list)
[[1, 2], [3, 4], [5, 6]]
>>> print[0][1]
2
#一番目のリストの二つ目の要素を表示

となるでしょう。ここで注目していただきたいのが、
print[0][1]

の部分です。最初のリストの最初の要素ですから記法は当然こうなります。添え字の部分に
[0,1]とするのは間違いだと思っていました。

しかしある日、実際にlist[0,1]という形式で配列内部の要素を抽出しているのを見つけてしまったのです。

犯人はNumpyのnumpy.arrayだった

上述の通り、
list_list = [[1,2],[3,4],[5,6]]
の"2"を表示するためには
print(list_list[0][1])
と書く必要があります。

print[0,1]と書こうものなら

Error
>>> print(list_list[0,1])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: list indices must be integers or slices, not tuple

というエラーが返ってきます。

"リストの添え字は整数だよ。タプルで渡されても困るよ。"という意味ですね。

しかし、Numpy配列ではデフォルトで添え字にタプルが渡せるのです。以下に例を示します。

numpy_array
>>> import numpy as np
>>> array = np.array([[1,2],[3,4],[5,6]])
>>> print(array[0][1])  #python標準の表記で2を取り出す
2
>>> print[0,1]  #添え字にタプルを渡しても指定できる
2

numpy arrayの仕様だったとは....どなたかの役に立てば幸いです。

50
26
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
50
26