Pythonでのリスト内包表記–例を使用

公開: 2022-02-18

Pythonでは、リスト内包表記は、リスト、文字列、タプルなどの既存の反復可能オブジェクトから新しいリストを作成するのに役立ちます。

それらの簡潔な構文により、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>に対して計算する出力です。

そして、これは単純に聞こえますね?

本質的には、リスト内のすべてのアイテム(または反復可能なもの)に対して何かを実行して、新しいリストを取得する必要があります。

これを使用すると、次の画像に示すように、構文を簡略化できます。

リスト内包表記構文
Pythonリスト内包構文(作成者による画像)

構文を学習したので、コーディングを開始します。 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_arrb_arrがあります。

そして、これらの4つの長方形の領域を含む新しいリストareaを作成する必要があります。 area = length * breadthであることを忘れないでください。

 l_arr = [4,5,1,3] b_arr = [2,1,7,9]

面積を計算するには、両方のリスト( l_arrb_arr )の要素が必要です。 そして、Pythonのzip()関数を使用してそれを行うことができます。

注: Pythonでは、 zip()関数は、構文zip(*iterables)を使用して1つ以上のiterableを引数として受け取ります。 次に、タプルのイテレータを返します。タプルiには、各イテレータの要素iが含まれています。

次の画像は、これを詳細に説明しています。 l_arrb_arrには4つの値があるため、インデックスの範囲は0〜3です。ご覧のとおり、タプル0にはl_arr[0]b_arr[0]が含まれ、タプル1にはl_arr[1]b_arr[1] 1]が含まれます。 b_arr[1] 、など。

python-zip-function
Python zip()関数(作成者による画像)

したがって、以下に示すよう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を満たすアイテムに対してのみ計算します。 そして、これは次のように単純化された構文につながります。

list-comprehension-with-condition-syntax
条件構文を使用したPythonリスト内包表記(作成者による画像)

それでは、コード例に進みましょう。

条件の例を使用した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()メソッドを使用して数字かどうかを確認します。
  • 数字の場合にのみ、新しいリストのdigitscharを追加します。

別の例を見てみましょう。

#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でファイルを処理する方法を学ぶことができます。