Pythonのリスト内包表記について

Python

リスト内包表記は、リストを簡潔に作成するための方法の1つです。for文とif文を組み合わせることで、複雑な処理を行うこともできます。リスト内包表記を使うことで、for文とif文を1行で記述することができます。

基本的な使い方

リスト内包表記を使って、新しいリストを作成する場合は、以下のように書きます。

new_list = [expression for item in iterable]

上記の式で、expressionはリストに格納する式、itemはfor文で処理する要素、iterableは処理するリストです。例えば、以下のようにリスト内包表記を使って、1から5までの整数を格納するリストを作成することができます。

numbers = [i for i in range(1, 6)]
print(numbers)

このコードを実行すると、[1, 2, 3, 4, 5]が出力されます。

条件式を使ったリスト内包表記

if文を使って、条件に合致する要素だけを取り出して新しいリストを作成することができます。以下のように、if文をリスト内包表記に組み込むことができます。

new_list = [expression for item in iterable if condition]

上記の式で、conditionはif文でチェックする条件です。例えば、以下のようにリスト内包表記を使って、1から5までのうち偶数だけを格納するリストを作成することができます。

even_numbers = [i for i in range(1, 6) if i % 2 == 0]
print(even_numbers)

このコードを実行すると、[2, 4]が出力されます。

複数のfor文を使ったリスト内包表記

複数のfor文を使って、複数のリストの要素を組み合わせて新しいリストを作成することができます。以下のように、for文をリスト内包表記に組み込むことができます。

new_list = [expression for item1 in iterable1 for item2 in iterable2]

上記の式で、iterable1とiterable2は処理するリストです。例えば、以下のようにリスト内包表記を使って、2つのリストの要素を組み合わせた新しいリストを作成することができます。

colors = ['red', 'green', 'blue']
fruits = ['apple', 'banana', 'orange']

color_fruit_pairs = [(color, fruit) for color in colors for fruit in fruits]
print(color_fruit_pairs)

このコードを実行すると、[(‘red’, ‘apple’), (‘red’, ‘banana’), (‘red’, ‘orange’), (‘green’, ‘apple’), (‘green’, ‘banana’), (‘green’, ‘orange’), (‘blue’, ‘apple’), (‘blue’, ‘banana’), (‘blue’, ‘orange’)]が出力されます。

リスト内包表記での条件式の複雑な使い方

リスト内包表記では、複数のif文やelse文を使って複雑な条件を処理することができます。以下に、いくつかの例を示します。

複数の条件を使ったリスト内包表記

複数の条件を使って、条件に合致する要素だけを取り出して新しいリストを作成することができます。以下のように、if文をリスト内包表記に複数組み込むことができます。

new_list = [expression for item in iterable if condition1 if condition2]

例えば、以下のようにリスト内包表記を使って、1から50までのうち3の倍数かつ5の倍数だけを格納するリストを作成することができます。

new_list = [i for i in range(1,  51) if i % 3 == 0 if i % 5 == 0]
print(new_list)

このコードを実行すると、[15, 30, 45]が出力されます。

if-else文を使ったリスト内包表記

if-else文を使って、条件に合致する要素と合致しない要素を分けて新しいリストを作成することができます。以下のように、if-else文をリスト内包表記に組み込むことができます。

new_list = [expression1 if condition else expression2 for item in iterable]

例えば、以下のようにリスト内包表記を使って、1から10までのうち2の倍数かつ3の倍数だけを”yes”とし、それ以外は”no”と格納するリストを作成することができます。

new_list = ["yes" if i % 2 == 0 and i % 3 == 0 else "no" for i in range(1, 11)]
print(new_list)

このコードを実行すると、[‘no’, ‘no’, ‘no’, ‘no’, ‘no’, ‘yes’, ‘no’, ‘no’, ‘no’, ‘no’]が出力されます。

複数の条件とfor文を組み合わせたリスト内包表記

複数の条件とfor文を組み合わせて、新しいリストを作成することができます。以下のように、if-else文とfor文をリスト内包表記に組み込むことができます。

new_list = [expression1 if condition1 else expression2 for item1 in iterable1 for item2 in iterable2 if condition2]

例えば、以下のようにリスト内包表記を使って、2つのリストの要素を組み合わせた新しいリストを作成し、条件によって要素を分けることができます。

numbers1 = [1, 2, 3, 4]
numbers2 = [3, 4, 5, 6]
new_list = [str(num1) + "-" + str(num2) if num1 < num2 else str(num2) + "-" + str(num1) for num1 in numbers1 for num2 in numbers2 if abs(num1 - num2) == 1]
print(new_list)

このコードを実行すると、[‘2-3’, ‘3-4’, ‘3-4’, ‘4-5’]が出力されます。

利用上の注意点

リスト内包表記は、for文やif文を使って、簡潔なコードでリストを生成することができます。ただし、複数の条件を組み合わせる場合や、処理が複雑になる場合には、可読性を考慮して通常のforループと条件文を使うことが推奨されます。

コメント