リスト内包表記を使ったリストの作成

リストを作成する時の方法の一つであるリスト内包表記の使い方について解説します。内包表記はうまく使用することでプログラムを簡潔に記述することができます。

(Last modified: )

リスト内包表記の使い方

リスト内包表記は次のような書式を使用します。

[式 for 変数 in イテラブルオブジェクト]

リストの中に for 文が組み込まれているような書式となっています。

例えば具体的な使い方として数値の 1 から 5 までの連続した値を要素に持つリストを作成する場合で考えてみます。要素を直接指定する方法や、空のリストを作成したあとで for 文を使って要素を追加する方法、リストのコンストラクタに range オブジェクトを指定してリストを作成する方法などがあります。

mylist = [1, 2, 3, 4, 5]
max = 5
mylist = []
for i in range(1, max + 1):
    mylist.append(i)
max = 5	
mylist = list(range(1, max + 1))

これに対してリスト内包表記を使用した場合には次のように記述することができます。

max = 5
mylist = [i for i in range(1, max + 1)]

リストに含まれる要素を直接プログラムに記述できる場合は直接書いてもいいですが、プログラム内で 1 から max までの連続した要素を持つリストを作成しなければならないような場合は他の方法を使う必要があります。リスト内包表記を使った方法はプログラムを簡潔に記述できるだけでなく、他の方法と比べて高速に動作すると言われています。

リスト内包表記では range オブジェクトなどのイテラブルオブジェクトから順に要素を取り出し、変数に代入します。そしてその変数を使った式の値をリストの要素として追加します。式には変数の値に対して演算などを行ったものを記述することができます。

mylist = [i for i in range(1, 6)]
print(mylist)
>> [1, 2, 3, 4, 5]

mylist = [i * 10 for i in range(1, 6)]
print(mylist)
>> [10, 20, 30, 40, 50]

最初のリストではイテラブルオブジェクトの要素をそのままリストの要素にしています。二番目のリストではイテラブルオブジェクトから取り出した要素に 10 を乗算した値をリストの要素にしています。これは次のように書いた場合と同じです。

mylist = []
for i in range(1, 6):
    mylist.append(i * 10)

print(mylist)
>> [10, 20, 30, 40, 50]

リスト内包表記は独特な記述方法のため慣れていないと使いにくいですが、簡潔に記述でき速度の点でもメリットがあると言われているので他の方のプログラムでも見る機会がい多いので、是非使い方は覚えておいてください。

条件式を加えたリスト内包表記

リスト内包表記では条件式を加えて条件式が真となった場合だけリストに要素として追加することができます。書式は次の通りです。

[式 for 変数 in イテラブルオブジェクト if 条件式]

イテラブルオブジェクトから要素を取り出し変数に代入したあと、条件式が真となった場合に式の値をリストの要素として追加します。

次の例ではイテラブルオブジェクトから取り出した要素の値が 3 の倍数だった場合だけリストに要素として追加しています。

mylist = [i for i in range(1, 20) if i % 3 == 0]
print(mylist)
>> [3, 6, 9, 12, 15, 18]

これは次のように書いた場合と同じです。

mylist = []
for i in range(1, 20):
    if i % 3 == 0:
        mylist.append(i)

print(mylist)
>> [3, 6, 9, 12, 15, 18]

このように条件式が必要となる場合でもリスト内包表記を使ってリストオブジェクトを作成することができます。

-- --

リストを作成する時の方法の一つであるリスト内包表記の使い方について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。