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'}

Python

Posted by skw