Pythonでのリスト内包表記–例を使用
公開: 2022-02-18Pythonでは、リスト内包表記は、リスト、文字列、タプルなどの既存の反復可能オブジェクトから新しいリストを作成するのに役立ちます。
それらの簡潔な構文により、1行のコードで新しいリストを作成できます。 そして、このチュートリアルでは、その方法を説明します。
次の数分で、次のことを学びます。
-
for
ループを使用して新しいリストを作成する方法 - Pythonでリスト内包表記を使用するための構文、および
if
条件文を使用してリスト内包表記を変更する方法。
さらに、リスト内包表記をよりよく理解するのに役立ついくつかの例もコーディングします。
飛び込みましょう。
forループを使用してPythonリストを作成する方法
数値nums
のリスト番号があるとします。 そして、 nums
のすべての数値の立方体を含む別のリストを作成したいとします。 Pythonでfor
ループを使用してこれを行う方法は次のとおりです。
nums = [2,3,5,7] num_cubes = [] for num in nums: num_cubes.append(num**3) print(num_cubes) # Output [8, 27, 125, 343]
上記のコードでは、次の手順があります。
- 空のリスト
num_cubes
を初期化します。 -
nums
リストをループします。 - 各数値
num
にアクセスし、べき乗演算子num**3
を使用してその立方体を計算します。 - 最後に、3乗された値をリスト
num_cubes
に追加します
注: Pythonでは、べき乗演算子
**
は次の構文で使用されますnum**pow
—数値num
は累乗pow
になります。
ただし、Pythonのリスト内包表記を使用すると、これをより簡単に行うことができます。 その構文を学びましょう。
Pythonリスト内包表記構文
リスト内包表記の一般的な構文を以下に示します。
<new_list> = [<expression> for <item> in <iterable>]
上記の構文を解析してみましょう。
- Pythonでは、リストは角かっこ
[]
のペアで区切られます。したがって、リスト内包表記を[[]
で囲む必要があります。 - <
<iterable>
の<item>
は、iterableをループしていることを意味します。 リスト、タプル、文字列など、ループして個々のアイテムにアクセスできるPythonオブジェクトはすべて反復可能です。 -
<expression>
は、<iterable>
内のすべての<item>
に対して計算する出力です。
そして、これは単純に聞こえますね?
本質的には、リスト内のすべてのアイテム(または反復可能なもの)に対して何かを実行して、新しいリストを取得する必要があります。
これを使用すると、次の画像に示すように、構文を簡略化できます。

構文を学習したので、コーディングを開始します。 GeekflareのオンラインPythonIDEを使用して、これらの例に従うことができます。 または、ローカルマシンで実行することもできます。
Pythonリスト内包表記の例
前のセクションでは、 nums
から新しいリストnum_cubes
を作成しました。 リスト内包表記を使用してそれを書き直すことから始めましょう。
数字によるリスト内包表記の使用
次に、簡略化された構文を次のように使用してみましょう。
-
<do-this>
:ここでは、各num
を3乗する必要があります。 したがって、<do-this>
をnum**3
に置き換えます。 -
<all-items>
:ループ変数はnum
—リスト内の個々の番号です。 -
<this-list>
:既存のリストはnums
です。 - そして、
[num**3 for num in nums]
が最終式です。
すべてをまとめると、次のコードスニペットがあります。
num_cubes = [num**3 for num in nums] print(num_cubes) # Output [8, 27, 125, 343]
おめでとうございます。最初のリスト内包表記をコーディングしました。
次に、Python文字列を操作してみましょう。
文字列でのリスト内包表記の使用
リストauthors
者がいるとします。以下のリストをお気に入りの作成者で書き直すことができます。
authors = ["jane austen","george orwell","james clear","cal newport"]
上記のリストでは、著者の名前が小文字になっていることに注意してください。 ここで、それらをタイトルケースでフォーマットし、 author_list
という新しいリストに保存します。
注: Pythonでは、文字列メソッドtitle()は引数として文字列を受け入れ、タイトルの場合にフォーマットされた文字列のコピーを返します。 つまり、各単語の最初の文字は大文字になります。
First-name Last-name
だからここにあなたがする必要があるすべてがあります:
-
authors
リストをループし、リスト内の各author
について、 -
author.title()
を呼び出して、文字列のタイトル付きコピーを取得します。
そして、このためのPythonコードを以下に示します。
authors = ["jane austen","george orwell","james clear","cal newport"] author_list = [author.title() for author in authors] print(author_list) # Output ['Jane Austen', 'George Orwell', 'James Clear', 'Cal Newport']
上記の出力では、すべての著者の名前がタイトルケースでどのようにフォーマットされているかを観察します。これは私たちが望んでいたことです。
複数のリストでのリスト内包表記の使用
これまで、リスト内包表記を使用して1つの既存のリストから新しいリストを作成する方法を学習しました。 次に、複数のリストから新しいリストを作成する方法を学びましょう。
たとえば、次の問題について考えてみます。4つの長方形の長さと幅を含む2つのリストl_arr
とb_arr
があります。

そして、これらの4つの長方形の領域を含む新しいリストarea
を作成する必要があります。 area = length * breadth
であることを忘れないでください。
l_arr = [4,5,1,3] b_arr = [2,1,7,9]
面積を計算するには、両方のリスト( l_arr
とb_arr
)の要素が必要です。 そして、Pythonのzip()
関数を使用してそれを行うことができます。
注: Pythonでは、
zip()
関数は、構文zip(*iterables)
を使用して1つ以上のiterableを引数として受け取ります。 次に、タプルのイテレータを返します。タプルi
には、各イテレータの要素i
が含まれています。
次の画像は、これを詳細に説明しています。 l_arr
とb_arr
には4つの値があるため、インデックスの範囲は0〜3です。ご覧のとおり、タプル0
にはl_arr[0]
とb_arr[0]
が含まれ、タプル1
にはl_arr[1]
とb_arr[1]
1]が含まれます。 b_arr[1]
、など。

したがって、以下に示すようzip(l_arr,b_arr)
をループできます。
area = [l*b for l,b in zip(l_arr,b_arr)] print(area) # Output [8,5,7,27]
次のセクションでは、リスト内包内で条件ステートメントを使用する方法を学習します。
条件構文を使用したPythonリスト内包
リスト内包表記の前の構文に基づいて構築することから始めましょう。
構文は次のとおりです。
<new_list> = [<expression> for <item> in <iterable> if <condition>]
すべてのアイテムの<expression>
を計算する代わりに、特定の<condition>
— where、 condition := True
を満たすアイテムに対してのみ計算します。 そして、これは次のように単純化された構文につながります。

それでは、コード例に進みましょう。
条件の例を使用したPythonリスト内包
#1。 「2022年にPythonを学んでいます」という文字列が表示されます。 この文字列のすべての数字のリストを取得したいとします。 それで、どうやってそれをしますか?
Pythonでは、
<char>.isdigit()
は文字<char>
に作用し、数字(0〜9)の場合はTrue
を返します。 それ以外の場合はFalse
を返します。
以下のコードスニペットは、文字列str1
のすべての数字のリストを収集する方法を示しています。
str1 = "I'm learning Python3 in 2022" digits = [char for char in str1 if char.isdigit()] print(digits) # Output ['3', '2', '0', '2', '2']
上記のコードでは:
- 文字列
str1
をループします。 - 各
char
にアクセスして、isdigit()
メソッドを使用して数字かどうかを確認します。 - 数字の場合にのみ、新しいリストの
digits
にchar
を追加します。
別の例を見てみましょう。
#2。 あなたは果物のリストを持っています。 そして、 b
で始まるfruits
リストのすべての果物を含むリストstarts_with_b
を作成したいとします。 startswith()
メソッドを使用して条件を書き込むことができます。
<str>.startswith('char')
は、<str>が'char'で始まる場合にTrue
を返します。 それ以外の場合はFalse
を返します。
fruits = ['blueberry','apple','banana','orange','cherry'] starts_with_b = [fruit for fruit in fruits if fruit.startswith('b')] print(starts_with_b) # Output ['blueberry', 'banana']
上記の出力では、予想どおり、 fruits
リスト'b'
で始まる2つのフルーツである'blueberry'
と'banana'
が得られます。
これで、リスト内包表記に関する議論は終わりです。
結論
このチュートリアルが、Pythonのリスト内包表記を理解するのに役立つことを願っています。
要約しましょう:
- [<this-list>の<all-items>に対して<dothis>]を使用すると、リスト内包表記を使用して新しいリストを作成できます。
- さらに、
if
条件ステートメントで構文[<do this> for <all-items> in <this-list>if<condition-is-True>]を使用できます。
さらに、いくつかの例もコーディングしました。 次のステップとして、リスト内包表記を使用して、リストを作成するために既存のPythonループの一部を書き直してみることができます。 ハッピーコーディング! 次のチュートリアルまで。
これで、リストを辞書に変換する方法や、Pythonでファイルを処理する方法を学ぶことができます。