😉

【Python】リスト内包表記 (List Comprehension)とは?

2024/09/22に公開

リスト内包表記とは?

リスト内包表記は、新しいリストを簡潔に作成するためのPythonの強力な機能です。

for文と同様の処理を1行で記述できるため、コードの可読性を高め、実行速度も向上させることができます。

基本的な構文:

new_list = [expression for item in iterable if condition]

expression: 新しいリストの要素となる値を表す式
item: イテラブルオブジェクト(リスト、タプル、文字列など)の要素を表す変数
iterable: イテラブルなオブジェクト
condition: (省略可能) 要素を追加する条件

1.シンプルなループ

0 から 4 までの数字で構成するリストを作成するコードです。

▼ 通常の表記

list = []
for i in range(5):
    list.append(i)

print(list)

#結果
[0, 1, 2, 3, 4]

▼ リスト内包表記


list_n = [ i for i in range(5)]
print(list_n)

#結果
[0, 1, 2, 3, 4]

2.演算アリ(expression)

リストを作成するときに、演算を加えます。

0 から 4 まで、それぞれの二乗した数字をリストにするコードです。

▼ 既存の表記

list = []
for i in range(5):
    squared = i**2
    list.append(squared)

print(list)

#結果
[0, 1, 4, 9, 16]

▼ リスト内包表記


list_n = [ i**2 for i in range(5)]
print(list_n)

#結果
[0, 1, 4, 9, 16]

3. 条件アリ(condition)

0 から 20 までの偶数でリストを作成するコードです。

▼ 既存の表記

list = []

for i in range(20):
    if i%2 ==0:
        list.append(i)

print(list)

#結果
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

▼ リスト内包表記

list_n = [ i for i in range(20) if i%2 ==0]
print(list_n)

#結果
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

4. 2重ループ

行 X 列 の計算結果のリストを作成するコードです。

▼ 既存の表記

list = []
for row in range(5):
    for col in range(5):
        list.append(row * col)

print(list)

#結果
[0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 2, 4, 6, 8, 0, 3, 6, 9, 12, 0, 4, 8, 12, 16]

▼ リスト内包表記

list = [ row * col for row in range(5) for col in range(5)]
print(list)

#結果
[0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 2, 4, 6, 8, 0, 3, 6, 9, 12, 0, 4, 8, 12, 16]

5. 三項演算子(if else的な処理)

if elseのように条件を満たさない要素には別の処理を行いたい場合は三項演算子を使用します。

大前提として、Pythonでは三項演算子は以下。

真のときの値 if 条件式 else 偽のときの値

rangeの要素を取り出して、奇数は'odd'、偶数は'even'に置き換えるコードです。

▼ 既存の表記

odd_even = []
for i in range(10):
    if i % 2 == 1:
        odd_even.append('odd')
    else:
        odd_even.append('even')
print(odd_even)

#結果
 ['even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd']

▼ リスト内包表記

odd_even = ['odd' if i % 2 == 1 else 'even' for i in range(10)]
print(odd_even)

#結果
 ['even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd']

参考にさせていただいた記事

https://qiita.com/kotai2003/items/adb45d0afdf8688d37c1

https://note.nkmk.me/python-list-comprehension/#if-else

Discussion