🐍 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回目のループでは何も出てこない点にも注意が必要です。

← Python list クイックリファレンス一覧へ戻る