2013年1月13日日曜日

コードを奇麗にする為にenumerate使えという話。

例えば異なるリストから1つのloopで同時に値を取り出したい場合

#ダサい書き方

hoge = [1,2,3,4,5,6,6,7]
fuge = ["a","b","c","d","e","f","g","h"]
i = 0

for x in hoge:
    print fuge[i] + str(x)
    i += 1

これは如何にもイケてません。

#ほんの少しだけイケテル書き方

hoge = [1,2,3,4,5,6,6,7]
fuge = ["a","b","c","d","e","f","g","h"]

for i,x in enumerate(hoge):
    print fuge[i] + str(x)
    #enumerateで、入ってるインデックス番号まで取り出せる。


もうちょっとイケテル場合はリスト内包表記で1行にしたり、
hoge = [1,2,3,4,5,6,6,7]
fuge = ["a","b","c","d","e","f","g","h"]

print [fuge[i]+str(x) for i,x in enumerate(hoge)]


listのindexエラー回避の為にtry分岐入れたりご自由に。
(そういえば、リスト内包表記にtryとか入れられるのかな?調べたケと出てこなかったので、今度試す。)

リスト内包表記はメモリの使用量も少ないし、上手く書けば10倍くらい早くなるので、積極的に使いたい所だけど、あんまり突っ込み過ぎると後で何やってるか分かりにくくなるので、程々にしておいた方が良い印象。どんどん入れた方が可読性上がるって説もあるけど、自分的にはあまり盛り込みすぎると却ってヤヤコシクなってしまいよろしく無い。
この辺は慣れの問題かも知れませんのでもう少し精進したい所です。

0 件のコメント:

コメントを投稿