[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
関連記事
Python3 OpenCV3を使って物体検出
Python3 OpenCV3で画像の特徴点を抽出 に関連。 前提 ディレクトリ ...
ローカルでも動くSlackBot管理ツールができるまで 〜 Bot編 〜
ローカルでも動くSlackBot管理ツールができるまで 〜 WebUI編 2 〜 ...
Python OpenCV3で疑似カラー処理(モノクロ画像からカラー画像へ?)
疑似カラー処理とは、画像内のRGB値の階調を変換する処理のこと。 やり方などもあ ...
Python OpenCV3でRGB値からHSV値(色相・彩度・明度)への変換
OpenCV3でRGB値からHSV値への変換方法を紹介。 前提 デ ...
[Python] lambda式について
リスト内包表記をまとめたいがためだけの回。 他のサイト様を見ていただいた方がいい ...
ディスカッション
コメント一覧
まだ、コメントがありません