【Python】 map は添字で参照できない
初めに
At Coderをやっていて、Pythonのmap
を使っていてエラーが解消できずつまったのでメモしておく。
書いたコード
実際に書いたコードが以下。
listA = map(int, input().split()) listB = map(int, input().split()) for i in range(4): if listA[i] - listB[i] > 0:
このコードを実行するとエラーになる。
TypeError: 'map' object is not subscriptable
解決策
結局どうすれば動くのかというとlist
関数の引数にmap
を渡すと動くようになる。なんでなんじゃあ。
listA = list(map(int, input().split())) listB = list(map(int, input().split())) for i in range(4): if listA[i] - listB[i] > 0:
map
よく分からないので調べてみる。ドキュメントによると map は、
イテレータを返します。
らしい。
イテレータ
調べてみてもよくわからない。イテレータのゲシュタルト崩壊を起こしそう。
で、イテレータには、
- シーケンス型
- 特殊なシーケンス型
- 辞書型等のイテレータオブジェクト
の3つがあるみたい。さらに調べてみる。
シーケンス型
シーケンス型には、list, tuple, rangeの3つがあるだね。なんとなく理解できた。
特殊なシーケンス型、辞書型
しかし、これら特殊なシーケンス型、辞書型については分からなかった。それぞれ、これって説明がない。 辞書オブジェクトというものならあった。
terator.iter
terator.iterがあると for in
が使えるみたい。
つまりmapもこれが実装されているんだね。
iterator, イテレータ型, イテレータオブジェクト?
???
要調査である。
参考文献
- 組み込み関数 — Python 3.7.3 ドキュメント 入手,https://docs.python.org/ja/3/library/functions.html#map