【Python】リストの内包表記の使い方

リストの内包表記とは、新たにリストを作成する時に一つずつ要素を入力してリストを作成しなくても、式などの条件を設定することで、パパっとリストが作成できてしまう表記方法です。

目次

基本の形

リストの内包表記には色々と書き方はありますが、基本の形は下記のようになります。
評価式 for i in イテラブルオブジェクト
ここで、iはよく使われるので、iとしていますがi以外の文字(変数)でも大丈夫です。イテラブルオブジェクトの部分はリストや文字列などの繰り返し処理で要素を取り出せるオブジェクトになります。
では、実際にリストを作ってみましょう。

Python
evens = [i*2 for i in range(3)]
print(evens) 

【実行結果】
[0, 2, 4]

上記の例ではi*2for以降のループの条件で実行され、リストが作成されました。
▼関連記事:range関数

内包表記を使わずに書くと次のようになります。

Python
evens = []
for i in range(3):
    i = i*2
    evens.append(i)
print(evens)

【実行結果】
[0, 2, 4]

内包表記より長くなってしまいます。append()メソッドについては下記記事をご参照ください。

in以降にリストを記載しておくこともできます。

Python
evens = [i*2 for i in [0,1,2]]
print(evens) 

【実行結果】
[0, 2, 4]

リストに対しても同じ結果を得ることができました。

ifを用いた内包表記

内包表記の基本の形から発展させてif文を追加して、さらに複雑な条件でリストを作成することもできます。
通常、下記のような形をとります。
評価式 for i in リストなど if 条件式
条件式が満たされた時(Trueの時)のみ、評価式で評価され、リストの要素として追加されます。実際の例です。30未満の3の倍数のリストを作成しています。

Python
multiples_3 = [i for i in range(1,30) if i % 3 ==0]
print(multiples_3)

【実行結果】
[3, 6, 9, 12, 15, 18, 21, 24, 27]

30未満の3の倍数のリストが作成できました。

内包表記を使わずに書くと次のようになります。

Python
multiples_3 = []
for i in range(1,30):
    if i % 3 == 0:
        multiples_3.append(i)
print(multiples_3)

【実行結果】
[3, 6, 9, 12, 15, 18, 21, 24, 27]

if elseを用いた内包表記

リストの内包表記ではifだけでなく、elseを使うこともできます。通常のif-else文と順番が変わるので、注意が必要です。次のような形をとります。
条件式が真の時の評価式 if 条件式 else 条件式が偽の時の評価式 for i in イテラブルオブジェクト
例として、1から10までで3の倍数はそのままの数を、それ以外はnot 3と表示するコードを書いてみます。

Python
multiples_3 = [i if i % 3 == 0 else "not 3" for i in range(1,10)]
print(multiples_3)

【実行結果】
['not 3', 'not 3', 3, 'not 3', 'not 3', 6, 'not 3', 'not 3', 9]

内包表記を使わずに書くと、次のようになります。

Python
multiples_3 = []
for i in range(1,10):
    if i % 3 == 0:
        multiples_3.append(i)
    else:
        multiples_3.append("not 3")
print(multiples_3)

【実行結果】
['not 3', 'not 3', 3, 'not 3', 'not 3', 6, 'not 3', 'not 3', 9]

複数の変数の内包表記(ネスト(入れ子)表記):二次元リスト

複数の変数を要素とする二次元リストを作成することもできます。

Python
two_d = [[i,j] for i in range(0,3) for j in range(1,3)]
print(two_d) 

【実行結果】
[[0, 1], [0, 2], [1, 1], [1, 2], [2, 1], [2, 2]]

二次元リストが作成できました。内包表記を使わずに書くと次のようになります。for文のネスト(入れ子)になっているのがわかります。

Python
two_d = []
for i in range(0,3):
    for j in range(1,3):
        sub_d = []
        sub_d.append(i)
        sub_d.append(j)    
        two_d.append(sub_d)
print(two_d)

【実行結果】
[[0, 1], [0, 2], [1, 1], [1, 2], [2, 1], [2, 2]]
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次