Pythonでは、リスト(配列)を処理するのにfor文ループが必要ときは、まずリスト内包表記が適用できないか考えるのが流儀らしい。コードが短く簡潔になって、パフォーマンス面でも良いとのこと。
例題として、「ツイッターのパブリックタイムラインから日本のユーザの表示名だけ抜き出す」というのを考えてみる。
import urllib2 import json # public_timeline取得 url = "http://twitter.com/statuses/public_timeline.json" response = urllib2.urlopen(url) statuses = json.loads(response.read()) # (1)for文 japan_users = [] for s in statuses: if s["user"]["time_zone"] == "Tokyo": japan_users.append(s["user"]["screen_name"]) print(japan_users) # (2)filter, map print(map(lambda s: s["user"]["screen_name"], filter(lambda s: s["user"]["time_zone"] == "Tokyo", statuses))) # (3)リスト内包 print([s["user"]["screen_name"] for s in statuses if s["user"]["time_zone"] == "Tokyo"])
どれもprint関数の出力結果は[u'user_name1', u'user_name2']の様なリストになる。
これまでの考え方を切り替えて、パッと(3)を思い付くようになることは、なかなか難しい。
もうタイトルのままで「馬鹿じゃないのか」と言いたいのだけど。
2010年9月請求分 (8月ご利用分) より、毎月郵送にてお届けしている請求書が、ケータイやパソコンで確認するWEB de 請求書に変わります。
2010年6月請求分から2010年8月請求分までは、郵送での請求書とWEB de 請求書の両方がご利用頂けます。
また、2010年9月ご請求分より、紙請求書発行停止特典を提供いたします。郵送での請求書を継続される場合は、申し込みが必要です (有料)。
上記と同内容の案内が封筒で届いた。ご丁寧に、携帯電話端末に設定している4桁の暗証番号が印字されている。いい迷惑である。
紙の請求書が有料になってしまうのは残念だが、しょうがないので請求情報が確定した段階でメールによる通知を受けられる「お知らせメール」というやつを設定しておくことにした。
設定は、ケータイからの操作と、PCのウェブブラウザからの操作と、どちらでも可能なようである。PCの場合は「auお客さまサポート」のサポートIDとパスワードを新たに作らなければならない。面倒なので手元のケータイから申し込むことにした。
馬鹿じゃないのか。
同じ質問ばかり繰り返すドラクエの王様じゃあるまいし。
最近のツッコミ
参号館 日記(ariyasacca)