Pythonでのリストの内包表記について
概要
Pythonではリストの内包表記 (list comprehension) が可能である。
この表記方法を使うとリストの生成をfilter()、map() を使わずに簡潔に行う事が出来る。
普段、主にCやJavaを使っている自分にとっては見慣れない表記法だったので、最初は戸惑ったが慣れれば難しくない。
リストの内包表記の便利さを知るために、とりあえずfilter()、map() についてそれぞれ簡単に説明する。
filter(function, sequence)
sequenceの中の要素から、functionの返り値が真となるような要素のみからなるsequenceを返す。
以下の例では、filter()を使うことにより、2の倍数のみからなるリストを取得している。
>>> def f(x): return x%2 == 0 >>> filter(f,range(1,11)) [2, 4, 6, 8, 10]
map(function, sequence)
sequenceの各要素に対してfunctionを呼び出し、その返り値からなるリストを返す。
以下の例では、引数として渡したリストの各要素を3乗したリストを取得している。
>>> def cube(x): return x*x*x >>> map(cube, range(1, 11)) [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
リストの内包表記
リストの内包表記を使うと上の2つの例を以下のように記述することが出来る。
>>> num = range(1,11) >>> [x for x in num if x % 2 == 0] ##これが内包表記 [2, 4, 6, 8, 10] >>> [x*x*x for x in num] ##これが内包表記 [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
filter()やmap()の際にはf(x),cube(x)のような単純な関数をいちいち定義する必要があったが、リストの内包表記ではその必要がない。
表記内で関数を呼ぶことも出来るので、以下の様な記述も可能。
>>> freshfruit = [' banana', ' loganberry ', 'passion fruit '] >>> [weapon.strip() for weapon in freshfruit] ['banana', 'loganberry', 'passion fruit']