読者です 読者をやめる 読者になる 読者になる

YAMAGUCHI::weblog

土足で窓から失礼いたします。今日からあなたの息子になります。 当年とって92歳、下町の発明王、エジソンです。

forループでのイディオム

動機

Pythonはfor-loopと言いつつ実際は他言語で言うところのfor-each的な使い方をするのでしばらく使っていないとダメコードを書いてしまう。そのためのメモ。

表現

range()を使って

普通のループとかはこんな感じで。

for i in range(1,10):
    print i
zip()を使って

for-eachの発想でPythonでは配列リストを使うことが推奨。当然リストだけでなく、タプルも使う。zip()は同要素数のリストをタプルのリストにするのでこういうことができる。

for i, j in zip(range(1,10), range(101,110)):
    print i, j
enumerate()を使って

上記の場合は要素数さえ合っていればいいので、2つのリストの各要素の型は特に気にしないけど、単純にインデックスがほしい場合はenamerate()を使うと便利。

week = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
for i, x in enumerate(week):
    print i, x
辞書を使って

辞書は普通な発想で。

week = {'Mon':0, 'Tue':1, 'Wed':2, 'Thu':3, 'Fri':4, 'Sat':5, 'Sun':6}
for k, v in week.iteritems():
    print k, v

ただし辞書なので表示は順不同です。あしからず。

まとめ

イテレータを持ってる物はぐるぐる回せます。

追記 (2008.11.12)

辞書型の場合にiteritems()メソッドを用いてあげないと

list(iter(week)) == list(week.keys())

となりエラーになることをご指摘いただきました。id:morchinさんありがとうございました。