🐍
【Python】内包表記によるリストの生成
概要
Pythonの、内包表記によるリストの生成に関する備忘録です。
内包表記とは
内包表記は、リストを簡潔な記述、かつ、高速に生成するもので、次のような書式を使用します。
[式 for 変数 in シーケンスオブジェクト]
以下に、通常のfor文を用いた場合との対比により、内包表記の使用例をいくつか示します。
基本形(通常のfor文)
1~10の整数を10倍したリストを生成します。
num_list = []
for i in range(1,11):
num_list.append(i*10)
print(num_list)
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
基本形(内包表記)
num_list = [i*10 for i in range(1,11)]
print(num_list)
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
内包表記では、シーケンスオブジェクトから順に取り出した要素を変数に代入し、その変数を使った式による値をリストの要素として追加します。
ネスト(通常のfor文)
num_list = []
for i in range(1,3):
for j in range(1,6):
num_list.append([i,j])
print(num_list)
[[1, 1], [1, 2], [1, 3], [1, 4], [1, 5], [2, 1], [2, 2], [2, 3], [2, 4], [2, 5]]
ネスト(内包表記)
num_list = [[i,j] for i in range(1,3) for j in range(1,6)]
print(num_list)
[[1, 1], [1, 2], [1, 3], [1, 4], [1, 5], [2, 1], [2, 2], [2, 3], [2, 4], [2, 5]]
for文をネストする場合、通常では中に入るfor文を右側に記述します。
条件式付き(通常のfor文)
if文により、点数が80点以上の人を抽出します。
test_list_80 = []
test_list_all = [('斎藤',90),('山田',75),('高橋',80),('鈴木',60),('岡田',85)]
for i in test_list_all:
if i[1] >= 80:
test_list_80.append(i[0])
print(test_list_80)
['斎藤', '高橋', '岡田']
条件式付き(内包表記)
test_list_all = [('斎藤',90),('山田',75),('高橋',80),('鈴木',60),('岡田',85)]
test_list_80 = [i[0] for i in test_list_all if i[1] >= 80]
print(test_list_80)
['斎藤', '高橋', '岡田']
条件式を追加することで、条件を満たした場合のみリストに要素を追加することができます。
まとめ
内包表記を使うことで、簡潔な記述によりリストを生成することができます。
Discussion