tomatoaiu の Tech Blog

プログラミングやツールについてのまとめブログ

【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, イテレータ型, イテレータオブジェクト?

???
要調査である。

参考文献