Pythonのリスト内包

リストはPythonの基本的なデータ型の1つです。

変数名の後に角括弧 [] が付いていたり、 list コンストラクタがあったりする場合、それは複数の項目を含むことができるリストであり、複合データ型であると言えます。

同様に、新しいリストを宣言して、それに1つまたは複数の項目を追加するのも簡単です。

例えば、新しい人口リストを作ってみましょう。

>>> new_list = [1, 2, 3, 4, 5]
>>> new_list
[1, 2, 3, 4, 5]


あるいは、単純に append() メソッドを使って、リストに好きなものを追加することもできます。

>>> new_list.append(6)
>>> new_list
[1, 2, 3, 4, 5, 6]


もし、同じリストに複数のアイテムを追加する必要がある場合は、 extend() メソッドが便利です。

以下のように、extend メソッドに追加するアイテムのリストを渡すだけです。

>>> new_list.extend([7, 8, 9])
>>> new_list
[1, 2, 3, 4, 5, 6, 7, 8, 9]


このように、リストを作成して他の項目を追加するのは簡単なことです。

このタスクは .append() メソッドを何度も呼び出すことなく行うことができます。

同様に、forループを使ってリストに複数のアイテムを追加することもできます。

例えば、1~20の整数に対する正方形のリストを作るには、次のようなコードを書かなければなりません。

list_a = []
for i in range(1, 20):
    list_a.append(i**2)


Pythonのリスト内包とは?

リスト内包とは、簡単に言うと、既存のリストから新しいリストを作成する処理です。

あるいは、リストに for ループを追加する Python 独自の方法であるとも言えます。

しかし、リストを宣言して、そこに好きなものを追加することは、すでにとても簡単なことなのです。

実は、リスト内包は従来のリストと比較して多くの利点があります。

まず、コードが1行で済むので、宣言がより簡単になり、読みやすくなります。

また、forループを使って新しいものを宣言するよりも、リストを理解する方が面倒ではありません。

最後に、新しく入力されたリストを生成する方法としても、便利で早く、直感的な方法です。

1から20までの整数の二乗に話を戻すと、リスト内包法を使っても同じ結果を得ることができます。

次のようなコードになります。

list_b = [i**2 for i in range(1, 20)]


リストの項目を生成するロジックがすべて大括弧で囲まれていることに注目してください。

この構文については、次のセクションで詳しく説明します。

S

リスト内包を使用する場合

リスト内包は、反復可能なものからリストを生成する必要がある多くのケースで使うことができます。

しかし、このメソッドを使用する最適なタイミングは、設定されたパターンに従って一貫してリストに項目を追加または抽出する必要があるときです。

Pythonの開発者は、多くの場合、大きなアイテムのコレクションからデータを抽出するためにこれを使用します。

例えば、何千人もの現在および過去の学生のリストがあり、彼らの名前、父親の名前、および住所があるとします。

それぞれの生徒のデータは、さらにそれぞれの辞書に格納されています。

しかし、彼らの名前だけを印刷したい場合はどうしたらよいでしょうか。

[expression for item in list if conditional]


伝統的な for ループを使って、リストに対して反復処理を行うことができます。

list_a = [1, 3, 6, 9, 12, 15]
list_b = []
for number in list_a:
    if number % 4 == 0:
        list_b.append(number)


print(list_b)


この例では、forループのコードは2行だけですが、これほど多くの行を書く必要はありません。

リスト内包メソッドを使えば、1行のコードで同じタスクを実行できます。

[12]


list_a = [1, 3, 6, 9, 12, 15]
list_b = [number for number in list_a if number % 4 == 0]


print(list_b)


結論

リスト内包を使うことで、実際に作業量を減らすことができるのは本当に驚きです。

しかし、最初のうちは戸惑うかもしれません。

特に、この領域に踏み込んだことのない初心者は、その構文が原因で困惑してしまいます。

また、他の言語でプログラミングをしたことがある場合、リスト内包はどの言語にも存在しないため、その概念を理解するのは難しいかもしれません。

リスト内包を理解する唯一の方法は、一生懸命練習することです。

タイトルとURLをコピーしました