Pythonの内包表記をメモ
Pythonの内包表記をメモしておく。(それにしても進歩がないなあ、もちろん自分のこと)
「内包表記」は名前は知っていたが、漢字4文字の難しそうな名前に腰が引けてしまう。内包する表記とは何だろう。Dive Into Pythonには次のように説明がある。
3.6. Mapping Lists
One of the most powerful features of Python is the list comprehension, which provides a compact way of mapping a list into another list by applying a function to each of the elements of the list.
(Dive Into Python)
Pythonで最もパワフルな特徴のひとつは内包表記だ。リストの個々の要素に関数を適応させ、簡潔な方法でもうひとつのリストを生成する。
(自分流超訳)
mapping 写像
comprehension 内包、包括
要するにこういうことだろうか。あるリストがあります。このリストのそれぞれの要素を演算して(関数を呼んで)、別のリストを作る機能らしい。リストのかっこ([])で囲まれているから「内包」と呼ぶのかなあ。もっと深遠な意味があるような気もするが、素人さんには数学の専門用語は難しい。
ネットの情報を読んでると、mappingなんかは「写像」なんて書かれていなくて、「マッピング」と表現されている。内包表記も「リスト・コンプリヘンション」と書かれていたほうがわかりやすいのではないだろうか。腰も引けにくいように思う。
リストの要素を2倍したリストを生成する
[2*x for x in [1,2,3,4,5]] 結果 [2,4,6,8,10]
ある条件に合致したものだけ2倍して、リストを生成する
[x for x in [1,2,3,4,5] if x % 2 == 0] 結果 [2,4]
タプルのリストを生成する
[(x,2*x) for x in [1,2,3,4,5]] 結果 [(1, 2), (2, 4), (3, 6), (4, 8), (5, 10)]
タプルリストから辞書を生成する
mylist = [ ["hokkaido","sapporo"], ["iwate","morioka"], ["miyagi","sendai"], ] mydict = dict([(k,v) for k,v in mylist]) print mydict 結果 {'iwate': 'morioka', 'miyagi': 'sendai', 'hokkaido': 'sapporo'}