Pythonのリスト内包表記について初心者向けに解説します。リスト内包表記を使うことで、簡潔にコードを書くことができます。
Pythonのリスト内包表記って便利ってよく聞くのですがどういうものですか?
リスト内包表記は、リストの要素を指定した式で計算して新しいリストを作成するための構文です。
リスト内包表記の基本的な書き方
リスト内包表記を利用すると、リストの要素を指定した式で計算して新しいリストを作成することができます。
リスト内包表記の基本的な書き方は、次のようになります。
[式 for 要素 in イテラブルオブジェクト]
- 式:新しいリストの要素として計算する式を指定します。
- 要素:新しいリストを作成するために、イテラブルオブジェクトから取り出す要素を指定します。
- イテラブルオブジェクト:リスト、タプル、集合、辞書など、繰り返し処理が可能なオブジェクトを指定します。
条件付きリスト内包表記
条件式を指定することで、要素の絞り込みが可能です。
以下は、条件を満たす要素のみを新しいリストに格納する例です。
[式 for 要素 in イテラブルオブジェクト if 条件式]
例えば、1から10までの数字のうち、偶数のみを2乗した新しいリストを作成する場合、以下のように書くことができます。
even_squares = [x**2 for x in range(1, 11) if x % 2 == 0]
このコードでは、1から10までの数字を順番に取り出し、その数が2で割り切れる場合に2乗した値を新しいリストに追加します。つまり、even_squaresは[4, 16, 36, 64, 100]というリストになります。
条件式は任意の式を書くことができます。たとえば、文字列のリストから長さが5以上の要素だけを取り出したい場合は、次のように書くことができます。
long_words = [word for word in words if len(word) >= 5]
このコードでは、wordsという文字列のリストから順番に要素を取り出し、その要素の長さが5以上である場合に、その要素を新しいリストに追加します。
ネストしたリスト内包表記
リスト内包表記をネストすることで、複雑な処理が可能です。以下は、リスト内包表記をネストした例です。
[式 for 要素1 in イテラブルオブジェクト1 for 要素2 in イテラブルオブジェクト2]
例えば、以下のようなリストがあるとします。
list1 = [1, 2, 3]
list2 = ['A', 'B', 'C']
この2つのリストから、全ての要素の組み合わせを持つ新しいリストを作成するには、次のようなネストしたリスト内包表記を使うことができます。
new_list = [(x, y) for x in list1 for y in list2]
このコードでは、list1とlist2の要素を順番に取り出して、全ての要素の組み合わせを持つタプルを新しいリストに追加します。つまり、new_listは[(1, ‘A’), (1, ‘B’), (1, ‘C’), (2, ‘A’), (2, ‘B’), (2, ‘C’), (3, ‘A’), (3, ‘B’), (3, ‘C’)]というリストになります。
ネストしたリスト内包表記は、条件付きリスト内包表記と組み合わせて使うこともできます。たとえば、次のように書くことができます。
new_list = [(x, y) for x in list1 for y in list2 if x != 2 and y != 'B']
このコードでは、list1とlist2の要素を順番に取り出して、xが2でなく、yがBでない要素の組み合わせを持つタプルを新しいリストに追加します。
サンプルプログラムを使った解説
サンプルプログラムを使った解説では、具体的な例を使ってリスト内包表記の使い方を説明します。
例えば、以下のようなコードがあります。
squares = [x**2 for x in range(1, 11)]
print(squares)
このコードは、1から10までの数字を2乗した新しいリストを作成し、そのリストを出力します。range(1, 11)は、1から10までの数字を順番に取り出すイテラブルオブジェクトです。x**2は、xを2乗した値を返す式です。つまり、このコードは、1から10までの数字を順番に取り出して、その数を2乗して新しいリストを作成します。そのリストは、[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]となります。
別の例として、以下のコードを考えてみましょう。
even_squares = [x**2 for x in range(1, 11) if x % 2 == 0]
print(even_squares)
このコードは、1から10までの数字のうち、偶数のみを2乗した新しいリストを作成し、そのリストを出力します。range(1, 11)は、1から10までの数字を順番に取り出すイテラブルオブジェクトです。if x % 2 == 0は、xが2で割り切れる場合に真と評価される条件式です。つまり、このコードは、1から10までの数字を順番に取り出して、その数が偶数である場合に2乗した値を新しいリストに追加します。そのリストは、[4, 16, 36, 64, 100]となります。
リスキリングでキャリアアップしてみませんか?
リスキリング(学び直し)は、経済産業省が推奨しており、
今だけ、最大70%のキャッシュバックを受けることができます。
最大70%の給付金が出るおすすめのプログラミングスクール!
国策で予算が決められているため申し込みが多い場合は早期に終了する可能性があります!
興味のある方はすぐに確認しましょう。
まとめ
Pythonのリスト内包表記について初心者向けに解説しました。
- リスト内包表記は、リストの要素を指定した式で計算して新しいリストを作成するための構文です。
- リスト内包表記の基本的な書き方は、「[式 for 要素 in イテラブルオブジェクト]」です。
- 条件式を指定することで、要素の絞り込みが可能です。「[式 for 要素 in イテラブルオブジェクト if 条件式]」と書きます。
- リスト内包表記をネストすることで、複雑な処理が可能です。「[式 for 要素1 in イテラブルオブジェクト1 for 要素2 in イテラブルオブジェクト2]」と書きます。
リスト内包表記は、初めて見たときは分かりづらかったけど、実際に使ってみると便利だと感じました。この記事を読んで、自分でもリスト内包表記を書いてみたくなりました!
リスト内包表記は、コードを簡潔に書くことができるため、Pythonプログラミングにおいて非常に有用な機能です。この記事を参考にして、ぜひ自分でもリスト内包表記を書いてみてください。
また、リスト内包表記は複雑な処理も可能なため、慣れてきたらぜひネストしたリスト内包表記も試してみてください。
コメント