パソコン日記

気づいたこと まとめてみる

Pythonのリスト内包表記をマスターする(その1)

Pythonのリスト内包表記とは?

プログラミング言語Pythonではリスト内包表記がよく用いられます。そもそもリスト内包表記とはどのようなものなのでしょうか。リスト内包表記とはfor文のようなループ、if文などの条件を使って新しいリストを生成する方法です。それなら、ループをするならfor文で書けばいいのではないか?と思う方もいらっしゃると思います。私も、もともとC言語Javaをメインに使っていたので、始めはfor文を頻繁に使っていました。しかし、リスト内包表記を用いることでプログラムが読みやすく書くことができたり、また、場合によっては実行速度も上げることができます。この記事ではPythonのリスト内包表記についてみていきたいと思います。

簡単なリスト内包表記の例

まず、二乗のリストを求めるプログラムを書いてみましょう。 リストはrange(10)で生成される[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]に対する処理を行ってみます。 for文で書くと次のようになります。コマンドラインで対話的に処理しています。

n = []
for x in range(10):
    n.append(x**2)
print(n)

これを実行すると

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

となります。このfor文ではrange(10)で生成されるリストを前から順にxに代入していきfor文の中を実行するというものです。 これをリスト内包表記で表すと次のようになります。

n = [x**2 for x in range(10)]
print(n)

一行でかけました!慣れてくるとこれが見やすくなってきます。

次はif文を使ってこのリストから偶数を求めてみます。 まずはfor文を使ったら例です。

n = []
for x in range(10):
    if x%2 == 0:
        n.append(x)
print(n)

実行すると

[0, 2, 4, 6, 8]

がでてきました。2で割ったあまりが0なら偶数です。 そして、リスト内包表記を使ったものを次に示します。

n = [x for x in range(10) if x%2 == 0]
print(n)

また、一行で書くことができました。 if文を最後につけることによって、条件に一致するものだけを選び出すことができます。

リスト内包表記ははじめは、とっつきにくいところがありますが、慣れてしまえば使いやすいですし、見やすいです。ぜひ使ってみてください。

とりあえず今回はここまでです。