Python リスト内包表記
1. リスト内包表記とは?
リスト内包表記 (List Comprehension) は、既存のリスト(またはイテラブルなオブジェクト)の値に基づいて、新しいリストを作成する際に、より短い構文を提供します。
比較例:名前の中に "a" が含まれるフルーツだけを抽出する
従来の for ループの場合:
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = []
for x in fruits:
if "a" in x:
newlist.append(x)
print(newlist)リスト内包表記の場合:
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = [x for x in fruits if "a" in x]
print(newlist)たった1行で同じ処理が完結します。これがPythonらしい(Pythonicな)コードの書き方です。
2. 構文 (The Syntax)
リスト内包表記の基本構造は以下の通りです。
newlist = [expression for item in iterable if condition == True]
補足: 戻り値は新しいリストです。元のリストは変更されません。
3. 条件 (Condition)
if 文による条件(Condition)は、フィルタ(Filter)のような役割を果たし、特定の条件を満たす項目のみを抽出します。
例:"apple" 以外のすべての項目を抽出する
newlist = [x for x in fruits if x != "apple"]if condition 部分は省略可能です。
4. イテラブル (Iterable)
イテラブル(Iterable)の部分には、リストだけでなく、タプル、セット、または range() 関数などのループ可能なオブジェクトなら何でも指定できます。
例:0から9までの数値リストを作成する
newlist = [x for x in range(10)]例:条件付き(5未満のみ)で作成する
newlist = [x for x in range(10) if x < 5]5. 式 (Expression)
式(Expression)の部分は、リストに追加される前に実行される加工(変換)処理です。
例:すべての項目を大文字に変換する
newlist = [x.upper() for x in fruits]例:すべての項目を特定の文字列('hello')に置き換える
newlist = ['hello' for x in fruits]6. if-else の活用
式の中に if-else を含めることで、条件に応じた値の出し分けが可能になります。
例:"banana" の場合は "orange" と表示し、それ以外はそのままにする
newlist = [x if x != "banana" else "orange" for x in fruits]この場合の構文は、「もし x が banana でなければ x を、そうでなければ(else) orange を返す」という意味になります。
リスト内包表記を使いこなすと、コードが格段にスッキリします。ただし、あまりに複雑な条件を1行に詰め込みすぎると、逆にかえって読みづらくなることもあるので、「読みやすさ」とのバランスを大切にしましょう。次は、作成したリストを並び替える「リストのソート(Sort Lists)」について見ていきましょう。