「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Python のリスト内包表記を理解する

Python のリスト内包表記を理解する

2024 年 8 月 27 日に公開
ブラウズ:552

Understanding List Comprehensions in Python

リスト内包表記は、Python でリストを作成するための強力かつ効率的な方法です。

既存の反復可能オブジェクトに基づいてリストを生成する、簡潔で読みやすい方法を提供します。

この記事では、リスト内包表記の微妙な違い、従来のループに対する利点、およびさまざまな実用的なアプリケーションについて探ります。


リスト内包表記とは何ですか?

リスト内包表記は、ループと条件付きロジックを 1 行のコードに結合することにより、構文的にコンパクトなリストを作成する方法です。

これにより、より読みやすく表現力豊かな方法でリストを生成できるようになり、コードの意図を一目で理解しやすくなります。


構造と例

リスト内包表記の基本構造は次のとおりです:

[expression for item in iterable if condition]

この構造のコンポーネントを分解してみましょう:

  • : これは、反復ごとに新しいリストに追加される値です。
  • for item in iterable: これは、反復可能な各項目 (リスト、タプル、セット、辞書、ジェネレーターなど) を反復処理するループ構造です。
  • if 条件: これは、新しいリストに含める項目をフィルタリングするオプションの条件ステートメントです。

例:

基本リスト内包表記:

numbers = [1, 2, 3, 4, 5]
squares = [x**2 for x in numbers]
print(squares)  

# Output: [1, 4, 9, 16, 25]

この例では、リスト内包表記を使用して、既存の数値リストから新しい正方形のリストを作成します。

条件付きリスト内包表記:

numbers = [1, 2, 3, 4, 5]
even_squares = [x**2 for x in numbers if x % 2 == 0]
print(even_squares)  

# Output: [4, 16]

この例では、偶数のみを含むように数値をフィルター処理し、その後 2 乗して、リスト内包表記での if 条件の使用を示します。


従来のループに対するリスト内包表記の利点

リスト内包表記には、従来のループに比べていくつかの利点があります:

  • 簡潔さ: リスト内包表記は従来のループよりも簡潔で読みやすく、コードの保守性が向上し、理解しやすくなります。
  • パフォーマンス: リスト内包表記はリストの作成用に最適化されているため、多くの場合、従来のループより高速です。
  • 可読性: リストの内包表記の意図は従来のループの意図よりも明確であり、他の人がコードを理解しやすくなります。

実用的なアプリケーション

リスト内包表記は、データを操作および処理するためにさまざまな方法で使用できます。

一般的な使用例をいくつか示します:
リストのフィルタリング:

words = ["apple", "banana", "cherry", "date"]
short_words = [word for word in words if len(word) 



この例では、単語のリストをフィルターして、5 文字以下の単語のみを含めます。

リストの変換:

temperatures_celsius = [0, 20, 30, 40]
temperatures_fahrenheit = [(temp * 9/5)   32 for temp in temperatures_celsius]
print(temperatures_fahrenheit)  

# Output: [32.0, 68.0, 86.0, 104.0]

この例では、温度のリストを摂氏から華氏に変換します。

ネストされたリスト内包表記:

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [num for row in matrix for num in row]
print(flattened)  

# Output: [1, 2, 3, 4, 5, 6, 7, 8, 9]

この例では、ネストされたリスト内包表記を使用して、2D リスト (行列) を 1D リストに平坦化します。

タプルのリストの作成:

pairs = [(x, y) for x in range(3) for y in range(3)]
print(pairs) 

# Output: [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

この例では、2 つの範囲の数値のすべての可能なペア (タプル) のリストを生成します。

重複を削除しています:

list_with_duplicates = [1, 2, 2, 3, 4, 4, 5]
unique_list = list(set([x for x in list_with_duplicates]))
print(unique_list)  

# Output: [1, 2, 3, 4, 5]

この例では、リストをセットに変換し、リストに戻すことで、リストから重複を削除します。


より高度なトピック

次に、リスト内包表記のバリエーションに関するさらに高度なトピックをいくつか見てみましょう。

ジェネレータ式
ジェネレーター式はリスト内包表記に似ていますが、リストの代わりに反復可能オブジェクトを生成します。

項目は一度にメモリに保存されるのではなく、その場で生成されるため、大規模なデータセットを操作する場合、メモリ効率が向上します。

numbers = [1, 2, 3, 4, 5]
squares_generator = (x**2 for x in numbers)

for square in squares_generator:
    print(square)

# Output
# 1
# 4
# 9
# 16
# 25

辞書と集合内包表記
Python は辞書とセットの内包表記もサポートしているため、リスト内包表記と同様に、簡潔な方法で辞書とセットを作成できます。

# Dictionary comprehension
numbers = [1, 2, 3, 4, 5]
squares_dict = {x: x**2 for x in numbers}
print(squares_dict)  

# Output: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}



# Set comprehension
list_with_duplicates = [1, 2, 2, 3, 4, 4, 5]
unique_set = {x for x in list_with_duplicates}
print(unique_set)  

# Output: {1, 2, 3, 4, 5}


結論

リスト内包表記は、簡潔で読みやすい方法でリストを作成できる Python の強力で多用途なツールです。

コードを簡素化し、パフォーマンスを向上させ、データの操作と処理を容易にします。

リスト内包表記とその高度な機能をマスターすることで、より効率的でクリーンな Python コードを作成できます。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/devasservice/ Understanding-list-comprehensions-in-python-1b2p?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3