【Python】これで完璧!リスト内包表記の使い方を解説!サンプルコード付き
リスト内包表記とはすでに定義されているリストなどを使用し、新しいリストなどを短く、簡潔な方法で作成することができます。
つまり、スマートにコードを書くことができるということです。
その為、新しいリストを作成するときによく使われます。
今回はリスト内包表記についてサンプルコードを使って解説します。
また、普通にかコードを書いた場合とリスト内包表記した場合のコードで比較しています。
目次
リスト内包表記とは
先ほども言いましたが、リスト内包表記とはすでに定義されているリストなどを使用し、新しいリストなどを短く、簡潔な方法で作成することができます。
正しく使用すれば非常に役立ちますが、注意しないと非常に読みにくくなりますので注意してください。
リスト内包表記の書き方
リスト内包表記の構文は下記になります。
1 |
[iの処理 for i in リストなど] |
iによってリストから要素を取り出し、iの処理によって新たなリストを作成します。
リスト内包表記のサンプルコード
例
1 2 |
num = [i*2 for i in range(10)] print(num) |
出力結果
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
iによってリストからインデックスの要素を取り出し、iの処理によって2倍された新たなリストが作成されています。
if文を使ったリスト内包表記
if文を使った状態でもリスト内包表記することができます。
ifを使ったリスト内包表記の書き方
ifのリスト内包表記の構文は下記になります。
1 |
[式 for 変数名 in リストなど if 条件式] |
条件式がTrueとなるリストなどの要素のみ式で評価され、その結果が要素となる新たなリストが返されます。
条件式の中でも任意の変数名が使えます。
ifを使ったリスト内包表記のサンプルコード
ifを使ったリスト内包表記のサンプルコードをみてみましょう。
ifの例1
1 2 3 4 5 6 7 |
num = [i for i in range(15) if i % 2 == 1] print(num) animal = [i for i in ["ゴリラ", "ライオン", "キリン", "ぞう"] if i == "ライオン"] print(animal) |
出力結果
[1, 3, 5, 7, 9, 11, 13]
[‘ライオン’]
numのリストの要素で2で割り切れない場合に要素としてその数値がリストに作成されます。
また、animalのリストの要素がライオンである場合に、要素として「ライオン」がリストに作成されます。
これをいつものように書くとこのようになります。
ifの例2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
num = [] for i in range(15): if i % 2 == 1: num.append(i) print(num) animal = [] for i in ["ゴリラ", "ライオン", "キリン", "ぞう"]: if i == "ライオン": animal.append(i) print(animal) |
出力結果
[1, 3, 5, 7, 9, 11, 13]
[‘ライオン’]
if-elseを使ったリスト内包表記の書き方
if-elseのリスト内包表記の構文は下記になります。
1 |
[真の値 if 条件式 else 偽の値 for 変数名 in リストなど] |
if-elseを使ったリスト内包表記のサンプルコード
if-elseを使ったリスト内包表記のサンプルコードをみてみましょう。
if-elseの例
1 2 3 4 5 6 7 |
num = [ i if i % 2 == 0 else "奇数である" for i in range(15)] print(num) animal = [ i if i == "ゴリラ" else "その他" for i in ["ゴリラ", "ライオン", "キリン", "ぞう"] ] print(animal) |
出力結果
[0, ‘奇数である’, 2, ‘奇数である’, 4, ‘奇数である’, 6, ‘奇数である’, 8, ‘奇数である’, 10, ‘奇数である’, 12, ‘奇数である’, 14]
[‘ゴリラ’, ‘その他’, ‘その他’, ‘その他’]
これをいつものif-elseで書くとこのようになります。
if-elseの例2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
num = [] for i in range(15): if i % 2 == 1: num.append(i) else: num.append("奇数である") print(num) animal = [] for i in ["ゴリラ", "ライオン", "キリン", "ぞう"]: if i == "ゴリラ": animal.append(i) else: animal.append("他の動物") print(animal) |
出力結果
[‘奇数である’, 1, ‘奇数である’, 3, ‘奇数である’, 5, ‘奇数である’, 7, ‘奇数である’, 9, ‘奇数である’, 11, ‘奇数である’, 13, ‘奇数である’]
[‘ゴリラ’, ‘他の動物’, ‘他の動物’, ‘他の動物’]
比較するとコードの量が圧倒的に違います。
ネストのリスト内包表記
スト内包表記は、ネストの場合でも書くことができます。
ネストのリスト内包表記の書き方
ネストのリスト内包表記の構文は下記になります。
1 2 3 |
[式 for 変数名1 in リストなど1 for 変数名2 in リストなど2 … ] |
リスト内包表記のネストのサンプルード
ネストの例1
1 2 3 4 |
num = [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10, 11]] num1 = [i for row in num for i in row] print(num1) |
出力結果
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
これをfor文のネストで書くとこのようになります。
ネストの例2
1 2 3 4 5 6 7 8 |
num = [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10, 11]] num1 = [] for row in num: for i in row: num1.append(i) print(num1) |
出力結果
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
for文のネストではインデントをずらして書かなければなりませんが、リスト内包表記では1行で書くことができています。
集合演算の内包表記
リスト内包表記の括弧を{}(波括弧)に変更することで、集合型のリストが作成されます。
集合演算の内包表記の書き方
集合演算のリスト内包表記の構文は下記になります。
1 |
{式 for 変数名 in リストなど} |
集合演算の内包表記のサンプルコード
例
1 2 3 4 5 6 7 |
num = {i*2 for i in range(15)} print(num) animal = { i for i in ["ゴリラ", "ライオン", "キリン", "ぞう"] } print(animal) |
出力結果
{0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28}
{‘ぞう’, ‘キリン’, ‘ゴリラ’, ‘ライオン’}
それぞれ、集合型のリストがリスト内包表記で作成されました。
辞書型の内包表記
リスト内包表記の括弧を{}(波括弧)に変更することで、辞書型のリストが作成されます。
辞書型の内包表記の書き方
辞書型のリスト内包表記の構文は下記になります。
1 |
{キー: 値 for 変数名 in リストなど} |
辞書型の内包表記のサンプルード
例
1 2 3 4 |
animal = ["ゴリラ", "ライオン", "ぞう","キリン", "キングコング"] animal1 = {i: len(i) for i in animal} print(animal1) |
出力結果
{‘ゴリラ’: 3, ‘ライオン’: 4, ‘ぞう’: 2, ‘キリン’: 3, ‘キングコング’: 6}
それぞれ、辞書型のリストがリスト内包表記で作成されました。
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。