リスト内包表記

入門Python3 4.6.1


これは便利ですね。内容としてはC#のLINQに似た機能です。

例えば以下のような処理があるとします

ary = [1,2,3,4,5]

result = []
for i in ary:
    result.append(i + 1)

print(result)
$ py main.py
[2, 3, 4, 5, 6]

これは与えられたリストに対してそれぞれ1を加算したリストを新しく生成する処理ですが、これをリスト内包表記で書くと以下のようになります

ary = [1,2,3,4,5]

result = [i + 1 for i in ary]
print(result)
$ py main.py
[2, 3, 4, 5, 6]

いやぁシンプルで良いですね。

他の例も見てみます、以下は偶数だけを抽出してリストを生成する処理になります。まずはリスト内包表記を使わない例です。

ary = [1,2,3,4,5]

result = []
for i in ary:
    if i % 2 == 0:
        result.append(i)

print(result)
$ py main.py
[2, 4]

これをリスト内包表記で書き換えると

ary = [1,2,3,4,5]

result = [i for i in ary if i % 2 == 0]
print(result)
$ py main.py
[2, 4]

こうなります。

他にもネストしたループにも対応しています。

ary1 = [1,2,3]
ary2 = ["a","b","c"]

result = [[a1,a2] for a1 in ary1 for a2 in ary2]
print(result)
$ py main.py
[[1, 'a'], [1, 'b'], [1, 'c'], [2, 'a'], [2, 'b'], [2, 'c'], [3, 'a'], [3, 'b'], [3, 'c']]

ただこのネストに関してはちょっと可読性があまり良くない気がするので使わない方が良いのかなぁという気もします。まぁ慣れの問題かもしれませんが。

とにかくリスト内包表記自体は便利なので今後も使っていこうと思います。