for文の基礎

入門Python3 4.5


Pythonのfor文はC言語でいうところのforではなく、C#でいうところのforeachとほぼ同義といったかんじになっています。

そしてむしろC的なforは提供されてないみたいです。

なのでもし似たようなことがしたい場合は以下のようにrange関数を使って

for i in range(1,10):
    print(i)
$ py main.py
1
2
3
4
5
6
7
8
9

このようにします。

ただここで気になるのがrange関数を使って例えばrange(1,100000000)のように指定した場合に巨大なリストが生成されてしまってメモリ効率的にはどうなの、ってことなのですがどうやらrengeが返すデータはリストではなくイテレータなのでメモリ効率を気にする必要はないとのこと。

そしてforに使えるデータはイテレータを実装しているオブジェクトならなんでもOKってことらしい。

というわけでいくつか実例を見ていく。

文字列のループ

一文字ずつ分解されて処理するかんじですね。

for c in "hoge":
    print(c)
$ py main.py
h
o
g
e

リストのループ

これはもう見たまんまです。

for item in ["foo","bar"]:
    print(item)
$ py main.py
foo
bar

タプルのループ

これもまんまです。

for item in ("foo","bar"):
    print(item)
$ py main.py
foo
bar

辞書のループ

辞書はキーと値のセットのデータ構造ですが、forでループするとキーのイテレータで処理されます。

hash = {"foo":1, "bar": 2}
for item in hash:
    print(item)
$ py main.py
foo
bar

keysを指定しても同じ挙動になります。

hash = {"foo":1, "bar": 2}
for item in hash.keys():
    print(item)
$ py main.py
foo
bar

valuesを指定すれば値のループも可能です。

hash = {"foo":1, "bar": 2}
for item in hash.values():
    print(item)
$ py main.py
1
2

集合のループ

これもリストとかと特にかわりませんね。

hash_set = {1,2,3,4}
for item in hash_set:
    print(item)
$ py main.py
1
2
3
4

またwhileと同じくelse節があります。仕様も同じですね。