[python]リスト内包表記(list comprehensions)について 1
素敵。
応用例書くかもしれないからタイトルに1をつける。。。
[amazonjs asin="B009Z30HPG" locale="JP" title="Dive Into Python 3 日本語版"]
リスト内包表記って
リストを定義するときに通常は、
[python]
array = [0,1,2,3,4,5,6,7,8,9]
[/python]
のように定義する。が、全然スマートじゃない。
それを内包表記、つまり[]の中で色々してスマートに定義する方法。
具体的に
ちょっとだけ「ぽく」書くと
[shell title="ぽい方法"]
In [1]: array = []
In [2]: for x in range(0, 10):
…: array.append(x)
…:
In [3]: array
Out[3]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[/shell]
とできる。とはいえ、配列を定義するのに数行書かないといけないのは
なんとなくイケてない。
ということで内包表記を使うと
[shell title="内包表記の例"]
In [1]: array = [x for x in range(0, 10)]
In [2]: array
Out[2]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[/shell]
となる。
一見よくわからないけど、リスト内でfor文を回して出てきた値(x)をリストに入力する感じ。
ちょっとした応用例
10未満の偶数だけリストにしたい場合、普通だと
[python]
array = [0, 2, 4, 6, 8]
[/python]
と書く。さっきのようにちょっと「ぽく」書くと、
[shell title="ぽい例"]
In [1]: array = []
In [2]: for x in range(0,10):
…: if x % 2 == 0:
…: array.append(x)
…:
In [3]: array
Out[3]: [0, 2, 4, 6, 8]
[/shell]
となるけどやっぱり大掛かりな感じ。
これを内包表記で書くと、
[shell title="内包表記"]
In [1]: array = [x for x in range(0, 10) if x % 2 == 0]
In [2]: array
Out[2]: [0, 2, 4, 6, 8]
[/shell]
となる。内包表記にはif文が使える。
スマート。
おまけ
lambda式とfilter関数を使っても偶数だけ抽出などが行える。
[shell]
In [1]: filter(lambda x: x%2==0, range(0, 10))
Out[1]: [0, 2, 4, 6, 8]
[/shell]
もっと簡単にだと、range関数の3つ目の引数を指定すれば
[shell]
In [1]: range(0, 10, 2)
Out[1]: [0, 2, 4, 6, 8]
[/shell]
でもできたりする。
でもリスト内包表記はもっと応用的に使えるので、使えた方がいい。
関連
lambda式,python,内包表記,基礎,関数lambda,lambda式,list comprehensions,python,python2,python3,リスト内包表記
Posted by umentu_blog
関連記事
Python Slack APIの使い方
Slackについては manapiさん のあたりで。 Slackで用意されている ...
Python OpenCV3でGaussianオペレータを使って平滑化
移動平均オペレータよりも加重平均オペレータの方がよりエッジがくっきりした平滑化が ...
Python OpenCV3で透視変換
透視変換とは、画像を3次元視点で見る変換のこと。 遠近法のような感じ。 ...
Python3 OpenCV3でK-Means法による減色処理
減色処理は、写真を油絵やイラストのように変換したいときに使われる。 ...
Python OpenCV3で画像の顔判定(ネタあり)
画像から顔を判定して四角で囲うという、もはや出尽くされてたネタ。 下準備というこ ...
ディスカッション
コメント一覧
まだ、コメントがありません