リスト内包表記はコードをより簡潔に、そしてPythonらしく書くための強力なツールです。
この記事では、リスト内包表記の基本から、その使い方までを初心者にも分かりやすく解説します。
リスト内包表記とは?
リスト内包表記は、リストを生成するための短い構文です。
これを使うことで、ループや条件文を使った複雑なリストの生成を、一行のコードで簡単に記述することができます。
基本形式
リスト内包表記の基本形式は以下の通りです:
1
|
[式 for アイテム in イテラブルオブジェクト]
|
オプションで、条件式を加えることもできます:
1
|
[式 for アイテム in イテラブルオブジェクト if 条件式]
|
例:数値のリストを生成する
1
2
|
squares = [x**2 for x in range(10)]
print(squares)
|
このコードは、0から9までの数値の二乗からなるリストを生成します。
例:条件を満たす要素のみを含むリストを生成する
1
2
|
even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares)
|
このコードは、0から9までの偶数の二乗からなるリストを生成します。
リスト内包表記の利点
- 簡潔性:複数行にわたるループや条件文を、一行で表現できます。
- 可読性:処理が一目で理解できるようになります。
- 効率性:リスト内包表記は通常のループよりも高速に実行されることが多いです。
応用例
文字列のリストを操作する
1
2
3
|
fruits = ["apple", "banana", "cherry", "kiwi"]
upper_fruits = [fruit.upper() for fruit in fruits]
print(upper_fruits)
|
このコードは、リスト内の全ての果物の名前を大文字に変換します。
複数のリストを組み合わせる
1
2
3
4
|
names = ["John", "Eric", "Michael", "Graham", "Terry"]
ages = [22, 45, 32, 55, 40]
info = [f"{name} is {age} years old." for name, age in zip(names, ages)]
print(info)
|
このコードは、名前と年齢のリストを組み合わせて、各人の情報を含む新しいリストを生成します。
文字列のリストから特定の文字で始まる要素を選択
1
2
3
|
words = ["apple", "banana", "cherry", "date", "fig", "grape"]
a_words = [word for word in words if word.startswith('a')]
print(a_words)
|
二次元リストをフラット化する
1
2
3
|
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [num for row in matrix for num in row]
print(flattened)
|
0から99までの数値の中から、3で割り切れる数値のみを選択
1
2
|
divisible_by_three = [x for x in range(100) if x % 3 == 0]
print(divisible_by_three)
|
リストの要素を変換して新しいリストを作成(全ての文字列を小文字に)
1
2
3
|
names = ["John", "ERICA", "Alice", "Bob"]
lower_names = [name.lower() for name in names]
print(lower_names)
|
リストの要素から新しい辞書を作成
1
2
3
|
fruits = ["apple", "banana", "cherry"]
fruit_dict = {fruit: len(fruit) for fruit in fruits}
print(fruit_dict)
|
複数の条件を持つリスト内包表記
1
2
3
|
numbers = range(1, 101)
filtered_numbers = [x for x in numbers if x % 2 == 0 if x % 5 == 0]
print(filtered_numbers)
|
リストの要素をキーとして、その長さを値とする辞書を作成
1
2
3
|
words = ["hello", "world", "python", "programming"]
word_length_dict = {word: len(word) for word in words}
print(word_length_dict)
|
ネストされたリスト内包表記を使って、行列の転置を行う
1
2
3
|
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
transposed = [[row[i] for row in matrix] for i in range(3)]
print(transposed)
|
注意点
リスト内包表記は非常に便利ですが、使いすぎるとコードの可読性を損なうことがあります。
特に、複雑な処理を一行で書こうとすると、理解しにくくなる可能性があります。
そのため、処理が複雑になる場合は、通常のループを使った方が良いかもしれません。
まとめ
リスト内包表記は、Pythonの強力な機能の一つで、リストを生成する際にコードを簡潔に保つのに役立ちます。
基本的な使い方をマスターすれば、Pythonプログラミングがより楽しく、効率的になるでしょう。
しかし、可読性を保つために、適切な場面で使うことが重要です。
Pythonを本格的に勉強したい方は、初心者に優しく分かりやすいPyQで学ぶのが最適です。
価格もリーズナブルなのでオススメです。