0Pricing
Python Academy · レッスン

入れ子になったループとループパターン

入れ子になったループを組み合わせて、グリッドやパターン、累積処理を実装します。

「入れ子になったループとループパターン」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。

概要

ループを組み合わせると、行列の走査、多段階の検索、組み合わせの生成といったパターンを実現できます。

基本的なネストしたループ

2つのforループでは、外側のループがN回実行され、内側のループが外側の各反復でM回実行されます。反復回数の合計はN*Mです。
for i in range(3):
    for j in range(3):
        print(i, j)

掛け算表

ネストしたループを使うと、自然に表を生成できます。外側のループが行、内側のループが列に対応します。
for i in range(1, 4):
    for j in range(1, 4):
        print(f'{i*j:3}', end='')
    print()

三角形パターン

各行で*をi回出力します:for i in range(1,6): print('*'*i)。内側のループの回数が外側のループに依存することを示しています。
for i in range(1, 6):
    print('*' * i)

行列の走査

2次元リストのすべてのセルを訪問するには、ネストしたループを使うのが標準的な方法です。
matrix = [[1,2,3],[4,5,6]]
for row in matrix:
    for val in row:
        print(val, end=' ')
    print()

累積パターン

すべての要素を合計します:total = 0; for row in matrix: for v in row: total += v
matrix = [[1,2],[3,4]]
total = sum(v for row in matrix for v in row)
print(total)

要素の検索

ネストしたループを使って2次元リストから値を検索し、その位置を記録します。
matrix = [[1,2,3],[4,5,6],[7,8,9]]
for i, row in enumerate(matrix):
    for j, val in enumerate(row):
        if val == 5:
            print(f'Found at ({i},{j})')

重複なしの組み合わせ

for i in range(n): for j in range(i+1, n): は、リストから重複しないすべてのペアを生成します。
items = ['a','b','c']
for i in range(len(items)):
    for j in range(i+1, len(items)):
        print(items[i], items[j])

ネストしたループの効率

ネストしたループでは、O(n^2)が一般的です。内側のループでリストを走査する代わりにdict検索を使えば、O(n)に削減できます。
# Efficient: use a set for inner lookup
data = {1, 2, 3, 4}
result = [x for x in range(10) if x in data]  # O(n)
print(result)

ネストした内包表記による平坦化

[x for row in matrix for x in row] は、ネストした内包表記でリストを平坦化するものです。左から右へ、まず外側のループを読みます。
matrix = [[1,2],[3,4]]
flat = [x for row in matrix for x in row]
print(flat)

ネストしたループから抜ける

フラグを使うか、ループを関数内に配置してreturnすることで、複数の階層からきれいに抜けられます。
def find_in_matrix(matrix, target):
    for i, row in enumerate(matrix):
        for j, val in enumerate(row):
            if val == target:
                return (i, j)
    return None
print(find_in_matrix([[1,2],[3,4]], 3))

理解度チェック

range(4)とrange(3)を使った2つのネストしたループの反復回数の合計はいくつですか?

まとめ

ネストしたループの反復回数の合計はN*Mです。パターンの実装、行列の走査、組み合わせの生成に使います。内包表記で平坦化し、returnまたはフラグでループから抜けます。

次へ進む

よくできました。次のレッスンに進み、スキルをさらに伸ばしましょう。

よくある質問

「入れ子になったループとループパターン」レッスンは無料ですか?

はい。「入れ子になったループとループパターン」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。

「入れ子になったループとループパターン」で何を学びますか?

入れ子になったループを組み合わせて、グリッドやパターン、累積処理を実装します。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Python Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「入れ子になったループとループパターン」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPython Academyレッスンでコードを書いて実行できますか?

はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. if / elif / else 文
  2. for ループと range()
  3. while ループとループ制御
  4. 入れ子になったループとループパターン
← Python Academyに戻る