🐍

【Python】内包表記によるリストの生成

2020/10/04に公開

概要

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