ホームページ  >  記事  >  バックエンド開発  >  Python のリスト内包表記を理解する

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

WBOY
WBOYオリジナル
2024-07-16 16:18:001131ブラウズ

Understanding List Comprehensions in Python

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

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

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


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

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

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


構造と例

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

[expression for item in iterable if condition]

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

  • : これは、反復ごとに新しいリストに追加される値です。
  • for item in iterable: これは、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]

この例では、数値をフィルタリングして偶数のみを含め、その後二乗して、リスト内包表記での if 条件の使用を示します。


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

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

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

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

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

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

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

# Output: ['apple', 'date']

この例では、単語のリストをフィルターして、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 コードを作成できます。

以上がPython のリスト内包表記を理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。