Pythonのリスト内包表記・map・filterをわかりやすく解説|効率的なデータ操作
この記事でわかること
- リスト内包表記とは何か
- for文との違いとメリット
- map関数でリストの要素を変換する方法
- filter関数で条件に合う要素だけ抽出する方法
- よくあるつまずきポイントと考え方
リスト内包表記とは
リスト内包表記とは、リストを作るときにfor文を1行で書く方法です
たとえば、0から4までの数字を2倍にしたリストを作る場合
通常のfor文
numbers = []
for i in range(5):
numbers.append(i * 2)
print(numbers) # [0, 2, 4, 6, 8]リスト内包表記
numbers = [i * 2 for i in range(5)]
print(numbers) # [0, 2, 4, 6, 8]1行で書けるので、コードがすっきりします
条件付きのリスト内包表記
条件を加えることもできます
numbers = [i for i in range(10) if i % 2 == 0]
print(numbers) # [0, 2, 4, 6, 8]偶数だけを抽出したリストが簡単に作れます
map関数
map関数は、リストのすべての要素に同じ処理を適用して、新しいリストを作る関数です
numbers = [1, 2, 3, 4, 5]
result = list(map(lambda x: x * 2, numbers))
print(result) # [2, 4, 6, 8, 10]lambda x: x * 2は無名関数(その場で作る関数)- mapは結果を返すので、list()でリストに変換します
リスト内包表記でも同じことができますが、mapは関数を組み合わせやすいのが特徴です
filter関数
filter関数は、条件に合う要素だけを抽出する関数です
numbers = [1, 2, 3, 4, 5]
result = list(filter(lambda x: x % 2 == 0, numbers))
print(result) # [2, 4]- 偶数だけを抽出しています
- 条件がTrueになった要素だけが新しいリストになります
filterもlist()でリストに変換するのを忘れずに
for文との比較
- リスト内包表記は1行で書けて、可読性が高い
- map/filterは関数との組み合わせで便利
- 複雑な処理や条件分岐が多い場合はfor文の方がわかりやすい場合もあります
使い分けると効率的です
注意点
- リスト内包表記は長くなりすぎると読みにくくなる
- map/filterはlambda関数を使うため、関数の書き方に慣れる必要があります
- 無理に1行で書こうとせず、可読性を重視することが大事です
まとめ
- リスト内包表記はfor文を1行で書ける便利な方法です
- 条件付きの内包表記で抽出も簡単にできます
- map関数で要素を変換、filter関数で条件に合う要素だけ抽出できます
- 複雑すぎる場合は、無理に1行にせずfor文と使い分けましょう
これを理解すれば、Pythonでのリスト操作が格段に効率化できます