前書き

*リスト内包*は、既存のリストに基づいてhttps://www.digitalocean.com/community/tutorials/understanding-lists-in-python-3[lists]を作成する簡潔な方法を提供します。 リスト内包表記を使用する場合、https://www.digitalocean.com/community/tutorials/を含むhttps://docs.python.org/3/glossary.html#term-iterable[iterable]を利用してリストを作成できます。 an-introduction-to-working-with-strings-in-python-3 [strings]およびhttps://www.digitalocean.com/community/tutorials/understanding-tuples-in-python-3[tuples]。

構文的には、リストの内包表記は、式を含むイテラブルとそれに続く `+ for `句で構成されます。 この後に、追加の「 for 」または「 if +」句を追加できるため、* https://www.digitalocean.com/community/tutorials/how-to-construct-for-loops-in-python-3に精通している[forループ] および https://www.digitalocean.com/community/tutorials/how-to-write-conditional-statements-in-python-3-2 [条件付きステートメント] *は、リストの理解をよりよく理解するのに役立ちます。

リスト内包表記は、リストおよびその他の連続したhttps://www.digitalocean.com/community/tutorials/understanding-data-types-in-python-3 [データ型]を作成するための代替構文を提供します。 `+ for +`ループなどの他の反復方法もリストの作成に使用できますが、リスト内包表記は、プログラムで使用される行数を制限できるため、好ましい場合があります。

リスト内包表記

Pythonでは、リスト内包表記は次のように構築されます。

list_variable = [x for x in iterable]

リストまたはその他の反復可能なものが変数に割り当てられます。 iterable内のアイテムを表す追加の変数は、 + for +`句の周りに構築されます。 `+ in +`キーワードは、 `+ iterable`を反復処理するために、 + for`ループでそのまま使用されます。

文字列に基づいてリストを作成する例を見てみましょう。

shark_letters = [letter for letter in 'shark']
print(shark_letters)

ここで、新しいリストは変数「+ shark letters」に割り当てられ、「+ letter」は反復可能な文字列「+ ‘shark’ +」に含まれるアイテムを表すために使用されます。

新しいリスト `+ shark_letters `の外観を確認するために、 ` print()+`を呼び出して次の出力を受け取ります。

Output['s', 'h', 'a', 'r', 'k']

リスト内包表記で作成したリストは、文字列 `+ ‘shark’ +`のアイテムで構成されています。つまり、文字ごとに1つの文字列です。

リスト内包表記は「+ for」ループとして書き換えることができますが、すべての「+ for」ループがリスト内包表記として書き換えられるわけではありません。

上記の `+ shark_letters `リストを作成したリスト内包表記を使用して、それを ` for +`ループとして書き直しましょう。 これは、リストの理解がどのように機能するかをよりよく理解するのに役立ちます。

shark_letters = []

for letter in 'shark':
   shark_letters.append(letter)

print(shark_letters)

+ for`ループを使用してリストを作成する場合、リストに割り当てられた変数は、コードブロックの最初の行にあるように、空のリストで初期化する必要があります。 反復可能な文字列「+ 'shark' +」の変数「+ letter」を使用して、アイテムを反復処理する「+ for」ループ。 `+ for +`ループ内では、文字列内の各アイテムはhttps://www.digitalocean.com/community/tutorials/how-to-use-list-methods-in-python-3#listappend()[に追加されます+ list.append(x)+`メソッドを使用したリスト]。

リスト内包表記を `+ for +`ループとして書き換えると、同じ出力が得られます。

Output['s', 'h', 'a', 'r', 'k']

リスト内包表記は + for`ループとして書き直すことができ、一部の + for`ループはリスト内包表記に書き換えてコードを簡潔にすることができます。

リスト内包表記で条件を使用する

リストの内包表記では、条件付きステートメントを利用して、新しいリストを作成するときに既存のリストまたはその他の順次データ型を変更できます。

リスト内包表記で使用される `+ if +`ステートメントの例を見てみましょう:

fish_tuple = ('blowfish', 'clownfish', 'catfish', 'octopus')

fish_list = [fish for fish in fish_tuple if fish != 'octopus']
print(fish_list)

リスト内包表記では、タプル `+ fish_tuple `を、 ` fish_list `と呼ばれる新しいリストの基礎として使用します。 https://www.digitalocean.com/community/tutorials/understanding-list-comprehensions-in-python-3#list-comprehensionsにあったように、「 for 」および「 in 」のキーワードが使用されます[上記のセクション]で、 ` if `ステートメントが追加されました。 ` if `ステートメントは、文字列 ` ‘octopus’ `と同等ではないアイテムのみを追加するように指示しているため、新しいリストは、タプルから ` ‘octopus’ +`に一致しないアイテムのみを取り込みます。

これを実行すると、 `+ fish_list `には ` fish_tuple `と同じ文字列項目が含まれますが、文字列 ` ‘octopus’ +`が省略されていることがわかります。

Output['blowfish', 'clownfish', 'catfish']

したがって、新しいリストには、条件ステートメントによって除外される文字列を除く、元のタプルのすべての項目が含まれます。

https://www.digitalocean.com/community/tutorials/how-to-do-math-in-python-3-with-operators [数学演算子]、https:// wwwを使用する別の例を作成します。 digitalocean.com/community/tutorials/understanding-data-types-in-python-3#numbers[integers]、およびhttps://www.digitalocean.com/community/tutorials/how-to-construct-for-loops -in-python-3#for-loops-using-range()[`+ range()+`シーケンスタイプ]。

number_list = [x ** 2 for x in range(10) if x % 2 == 0]
print(number_list)

作成中のリスト `+ number_list +`には、アイテムの値が2で割り切れる場合、0〜9の範囲の各アイテムの2乗値が入力されます。 出力は次のとおりです。

Output[0, 4, 16, 36, 64]

リスト内包表記の処理をもう少し詳しく説明するために、範囲(10)+のxに対してxを呼び出すだけで何が印刷されるかを考えてみましょう。 小さなプログラムと出力は次のようになります。

number_list = [x for x in range(10)]
print(number_list)
Output[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

それでは、条件ステートメントを追加しましょう。

number_list = [x for x in range(10) ]
print(number_list)
Output[0, 2, 4, 6, 8]

`+ if +`ステートメントは、すべての奇数を省略して、2で割り切れるアイテムのみを含むように最終リストのアイテムを制限しました。

最後に、各 `+ x +`を二乗する演算子を追加できます。

number_list = [ for x in range(10) if x % 2 == 0]
print(number_list)

そのため、前のリストの「+ [0、2、4、6、8] +」の各数値は、2乗になりました。

Output[0, 4, 16, 36, 64]

またhttpsリストの理解:

number_list = [x for x in range(100) if x % 3 == 0 if x % 5 == 0]
print(number_list)

ここで、リスト内包表記は、最初に数値「+ x」が3で割り切れるかどうかを確認し、次に「+ x」が5で割り切れるかどうかを確認します。 `+ x +`が両方の要件を満たしている場合、印刷され、出力は次のようになります。

Output[0, 15, 30, 45, 60, 75, 90]

条件付きの `+ if +`ステートメントを使用して、既存のシーケンスのどのアイテムを新しいリストの作成に含めるかを制御できます。

リスト内包の入れ子ループ

https://www.digitalocean.com/community/tutorials/how-to-construct-for-loops-in-python-3#nested-for-loops [ネストされたループ]を使用して、プログラムで複数の反復を実行できます。

今回は、既存のネストされた「+ for +」ループ構造を見て、リストの理解に向けて取り組みます。

コードは、2つのリストを反復処理し、それらに基づいて数学演算を実行する新しいリストを作成します。 ネストされた「+ for」ループコードブロックは次のとおりです。

my_list = []

for x in [20, 40, 60]:
   for y in [2, 4, 6]:
       my_list.append(x * y)

print(my_list)

このコードを実行すると、次の出力が表示されます。

Output[40, 80, 120, 80, 160, 240, 120, 240, 360]

このコードは、反復ごとに最初のリストの項目に2番目のリストの項目を乗算しています。

これをリスト内包表記に変換するために、コードの各行を「+ x * y 」操作で始まる1行に圧縮します。 これに、外側の「 for」ループ、次に内側の「+ for」ループが続きます。 リスト内包表記の下に `+ print()`ステートメントを追加して、上記のネストされた ` for +`ループブロックで作成したリストと新しいリストが一致することを確認します。

my_list = [x * y for x in [20, 40, 60] for y in [2, 4, 6]]
print(my_list)
Output[40, 80, 120, 80, 160, 240, 120, 240, 360]

リスト内包表記は、ネストされた「+ for」ループを取り、それらを1行のコードにフラット化しながら、「+ my list」変数に割り当てるまったく同じリストを作成します。

リストの内包表記により、リストを作成する簡潔な方法が提供され、数行のコードを1行に変換できます。 ただし、コードの可読性は常に優先される必要があるため、リストの理解の行が長すぎるか扱いにくい場合は、ループに分割することをお勧めします。

結論

リストの内包表記により、1つのリストまたは他のシーケンスを新しいリストに変換できます。 これらは、このタスクを完了するための簡潔な構文を提供し、コードの行を制限します。

リスト内包表記は、セットビルダー表記法またはセット内包表記の数学的形式に従うため、数学的な背景を持つプログラマーにとって特に直感的です。

リストを理解するとコードが簡潔になりますが、最終的なコードをできるだけ読みやすくすることが重要です。そのため、コードがユーザーフレンドリであることを保証するために、非常に長いコード行を避ける必要があります。