Python の 1 行の for ループ
-
Python での従来の
for
ループ -
1 行の
for
ループの紹介 -
リスト内包表記: 1 行の
for
ループの基礎 - 内包表記での条件文の使用
- ネストされた内包表記
- 辞書とセットの内包表記
- 結論

Python のシンプルさと汎用性は、最も人気のあるプログラミング言語の 1つとなっています。その強力な機能の 1つは、簡潔で読みやすいコード
を書く能力であり、一般的な操作に必要な行数を減らすことができます。
これらのテクニックの中でも、1 行の for
ループ(内包表記
とも呼ばれる)は、データ構造を反復処理しながら明確さと効率を維持するエレガントな方法として際立っています。リスト、辞書、セットを処理したり、複雑なデータ変換を生成したりする場合でも、1 行の for
ループは読みやすさ、実行速度、パフォーマンスを向上させるのに役立ちます。
この記事では、Python の 1 行 for
ループについて深く掘り下げ、その構文、利点、実世界での応用を探ります。従来の for
ループから始めて、内包表記、条件文、ネストされたループへと進んでいきます。
このガイドを読み終える頃には、1 行の for
ループを使用してクリーンで効率的かつ最適化された Python コードを書けるようになるでしょう。
Python での従来の for
ループ
1 行の for
ループに飛び込む前に、まず従来の for
ループが Python でどのように機能するかを理解しましょう。標準の for
ループは、リスト、タプル、範囲などのシーケンスを反復処理し、シーケンス内の各アイテムに対してコードブロックを実行します。
例: 数値リストを出力する
numbers = [1, 2, 3, 4, 5]
for num in numbers:
print(num)
出力:
1
2
3
4
5
ここでは、Python が numbers
内の各アイテムを反復処理し、各反復で print(num)
を実行します。
例: リスト内の数値を 2 乗する
numbers = [1, 2, 3, 4, 5]
squares = []
for num in numbers:
squares.append(num ** 2)
print(squares)
出力:
[1, 4, 9, 16, 25]
従来の for
ループは読みやすく理解しやすいですが、単純な操作を実行する際に長くなり、複数行を占める
ことがあります。ここで 1 行の for
ループが役立ち、コードを簡潔に保ちながら読みやすさを維持します。
1 行の for
ループの紹介
1 行の for
ループ(リスト内包表記
とも呼ばれる)を使用すると、同じロジックを 1 行で実行でき、不要なインデントを排除し、読みやすさを向上させます。一般的な構文は次のとおりです:
[expression for item in iterable]
例: 1 行で数値を 2 乗する
従来の for
ループを使用する代わりに、リスト内包表記
を使用して同じ結果をより効率的に達成できます:
numbers = [1, 2, 3, 4, 5]
squares = [num ** 2 for num in numbers]
print(squares)
出力:
[1, 4, 9, 16, 25]
このアプローチにはいくつかの利点があります:
簡潔で読みやすい
: 操作全体が 1 行で実行されます。実行速度が速い
: リスト内包表記は内部的に最適化されており、従来のfor
ループよりもパフォーマンスが向上します。変更が簡単
: 操作を単一の式内で簡単に調整できます。
例: 文字列リストを大文字に変換する
words = ["hello", "world", "python"]
uppercase_words = [word.upper() for word in words]
print(uppercase_words)
出力:
['HELLO', 'WORLD', 'PYTHON']
リスト内包表記は、さまざまなデータ変換
に使用でき、現代の Python プログラミングの基本的な部分となっています。
リスト内包表記: 1 行の for
ループの基礎
リスト内包表記を使用すると、既存の反復可能オブジェクトから新しいリストを単一のコンパクトなステートメントで作成できます。Python でリストを変換する別の一般的な方法は、map()
関数を使用することです。基本的な構文は次のパターンに従います:
[expression for item in iterable]
expression
: 各アイテムに対して実行される操作。item
: 反復可能オブジェクト内の現在の要素。iterable
: 反復処理されるデータ構造(例: リスト、タプル、セット、辞書)。
例: リスト内の数値を 2 倍にする
numbers = [1, 2, 3, 4, 5]
doubled = [num * 2 for num in numbers]
print(doubled)
出力:
[2, 4, 6, 8, 10]
例: 単語の最初の文字を抽出する
words = ["apple", "banana", "cherry"]
first_letters = [word[0] for word in words]
print(first_letters)
出力:
['a', 'b', 'c']
内包表記での条件文の使用
リスト内包表記には、特定の条件に基づいて要素をフィルタリングするための条件文を含めることができます。これにより、同じ行内でよりクリーンで効率的なフィルタリングが可能になります。関数型スタイルでフィルタリングを実現する別の方法は、filter()
関数と Lambdaを使用することです。
例: 偶数をフィルタリングする
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = [num for num in numbers if num % 2 == 0]
print(even_numbers)
出力:
[2, 4, 6]
この例では、if
条件により、2 で割り切れる数値のみが新しいリストに追加されます。このアプローチは、if
ステートメントを使用した従来のループよりも効率的です。
例: 特定の文字を含む単語を抽出する
words = ["apple", "banana", "cherry", "date"]
words_with_a = [word for word in words if "a" in word]
print(words_with_a)
出力:
['apple', 'banana', 'date']
この方法は、特定の文字を含む単語や長さの要件を満たす単語をフィルタリングする場合に便利です。ただし、ソート操作を扱う場合、ソートでの Lambda 関数を使用してクイックインライン関数を適用するのが役立つかもしれません。
ネストされた内包表記
内包表記をネストして、リストのリストなどの多次元構造を処理できます。これは、行列や多階層のデータ構造を扱う場合に特に便利です。1 行でネストされたループを書く方法について詳しく知りたい場合は、Python で 1 行でネストされた for
ループを書く方法のガイドをチェックしてください。
例: 2 次元リストをフラット化する
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [num for row in matrix for num in row]
print(flattened)
出力:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
ここでは、ネストされた内包表記が最初に各行を反復処理し、次にその行内の各 num
を反復処理し、行列を 1 次元リストにフラット化します。
例: 九九の表を作成する
table = [[i * j for j in range(1, 6)] for i in range(1, 6)]
for row in table:
print(row)
出力:
[1, 2, 3, 4, 5]
[2, 4, 6, 8, 10]
[3, 6, 9, 12, 15]
[4, 8, 12, 16, 20]
[5, 10, 15, 20, 25]
辞書とセットの内包表記
リストと同様に、Python では 1 行の辞書とセットの内包表記を使用してコレクションを効率的に作成できます。辞書から要素を動的に削除する方法について詳しく知りたい場合は、Python 辞書から要素を削除する方法をチェックしてください。
例: 2 乗の辞書を作成する
numbers = [1, 2, 3, 4]
square_dict = {num: num ** 2 for num in numbers}
print(square_dict)
出力:
{1: 1, 2: 4, 3: 9, 4: 16}
例: 単語の長さのユニークなセットを作成する
words = ["apple", "banana", "cherry"]
unique_lengths = {len(word) for word in words}
print(unique_lengths)
出力:
{5, 6}
結論
この包括的なガイドでは、Python の 1 行 for
ループの力を探り、従来のループの基本から、リスト内包表記、条件付きフィルタリング、ネストされた内包表記、辞書およびセットの内包表記といったより高度なテクニックまで進みました。
リスト内包表記がデータを変換するためのより簡潔で読みやすい方法を提供すること、内包表記内の条件が効率的なフィルタリングを可能にすること、ネストされた内包表記が多次元データ構造をシームレスに処理できることを確認しました。さらに、キーと値のマッピングやユニークなコレクションを生成するための強力な方法を提供する辞書とセットの内包表記についても探りました。