🐍 Python
map(function, iterable) / filter(function, iterable)
mapは各要素に関数を適用して変換し、filterは条件に合う要素だけを残します。どちらも結果はイテレータとして返されるため、リストとして使うにはlist()で囲む必要があります。
map(function, iterable) # 各要素にfunctionを適用したイテレータ
filter(function, iterable) # functionがTrueを返す要素だけのイテレータ
mapの基本:各要素を変換する
nums4 = [1, 2, 3]
doubled = list(map(lambda x: x * 2, nums4))
print(doubled) # [2, 4, 6]
mapに組み込み関数を渡す
ラムダ式でなくても、intやstrのような関数そのものを渡せます。文字列のリストを数値のリストに一括変換する定番パターンです。
strs = ["1", "2", "3"]
ints = list(map(int, strs))
print(ints) # [1, 2, 3]
filterの基本:条件に合う要素だけ残す
nums5 = [1, 2, 3, 4, 5, 6]
evens2 = list(filter(lambda x: x % 2 == 0, nums5))
print(evens2) # [2, 4, 6]
同じ結果はリスト内包表記でも書ける
Pythonでは同じ処理をリスト内包表記でも書けます。多くのPythonプログラマーはfilterより内包表記の方を好んで使います。
evens3 = [x for x in nums5 if x % 2 == 0]
print(evens3) # [2, 4, 6](filterと同じ結果)
パラメータ
- function
- 各要素に適用する関数。
lambda式やint・strのような組み込み関数を渡せる - iterable
- 処理対象のリストなど
- 戻り値
- どちらもイテレータ(map/filterオブジェクト)。リストとして使うには
list()で囲む
💡 AIコードレビュー観点:list()で囲み忘れてprintしても中身が見えない
mapやfilterの結果は<map object at 0x...>のようなオブジェクトの表示になり、print()しても中身が見えません。AIが生成したコードでmap()やfilter()の結果をそのままprintしている、あるいはそのまま長さを数えようとしている箇所があれば、list()で囲んでいるかを確認してください。一度list()やforループで消費すると、イテレータは中身が空になり2回目のループでは何も出てこない点にも注意が必要です。