0Pricing
Python Academy · レッスン

入れ子になったリストと反復処理

入れ子になったリストを扱い、for ループで効率的に反復処理します。

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

概要

リストには別のリストを含めることができ、多次元構造を作成できます。ネストした反復処理を身につけることは、グリッドや行列を扱ううえで重要です。

ネストしたリストの構造

matrix = [[1,2,3],[4,5,6],[7,8,9]] は 3x3 のグリッドです。matrix[1][2] は1行2列にアクセスし、値は 6 です。
matrix = [[1,2,3],[4,5,6],[7,8,9]]
print(matrix[1][2])

行の反復処理

for row in matrix: print(row) は各サブリストを出力します。row 自体がインデックス参照できるリストです。
matrix = [[1,2],[3,4]]
for row in matrix:
    print(row)

ネストした for ループ

for row in matrix: for val in row: print(val) は個々の要素をすべて出力します。
matrix = [[1,2],[3,4]]
for row in matrix:
    for val in row:
        print(val, end=' ')

ネストしたリストを平坦化する

[x for row in matrix for x in row] は1階層分を平坦化します。これはネストしたリスト内包表記です。
matrix = [[1,2],[3,4]]
flat = [x for row in matrix for x in row]
print(flat)

グリッドの作成

N×M のグリッドを作成します: grid = [[0]*M for _ in range(N)]。リスト内包表記を使ってください。[[0]*M]*N は行のエイリアスを作成するため、使わないでください。
grid = [[0]*3 for _ in range(3)]
grid[0][0] = 1
print(grid)

エイリアスされた行の落とし穴

grid = [[0]*3]*3 は、同じ行への参照を3つ作成します。1つを変更するとすべてが変更されます。必ず内包表記を使ってください。
bad = [[0]*3]*3
bad[0][0] = 9
print(bad)  # all rows changed!

並列反復処理のための zip()

for a, b in zip(list1, list2) は2つのリストを並列に反復処理します。zip() は短いほうのリストに合わせて停止します。
names = ['Alice', 'Bob']
scores = [90, 85]
for n, s in zip(names, scores):
    print(n, s)

ネストしたリストでの enumerate()

for i, row in enumerate(matrix): for j, val in enumerate(row): を使うと、インデックスと値の両方を取得できます。
matrix = [[1,2],[3,4]]
for i, row in enumerate(matrix):
    for j, val in enumerate(row):
        print(f'[{i}][{j}]={val}')

リストのリストのソート

sorted(data, key=lambda x: x[1]) は各サブリストの2番目の要素を基準にソートします。
data = [['Bob',85],['Alice',90],['Charlie',78]]
data.sort(key=lambda x: x[1])
print(data)

行列の転置

transposed = list(zip(*matrix)) は行を列に転置します。* は外側のリストを zip の引数としてアンパックします。
matrix = [[1,2,3],[4,5,6]]
print(list(zip(*matrix)))

確認問題

エイリアスされた行の落とし穴を避けて、0で埋めた 3x3 のグリッドを作成する正しい方法は何ですか。

まとめ

ネストしたリストには [row][col] でアクセスし、ネストした for ループで反復処理します。グリッドの作成には内包表記を使います。並列反復処理には zip()、転置には zip(*matrix) を使います。

次へ進む

よくできました。次のレッスンに進み、引き続きスキルを身につけていきましょう。

よくある質問

「入れ子になったリストと反復処理」レッスンは無料ですか?

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

「入れ子になったリストと反復処理」で何を学びますか?

入れ子になったリストを扱い、for ループで効率的に反復処理します。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「入れ子になったリストと反復処理」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. リストの作成とアクセス
  2. リストの変更
  3. タプルと不変性
  4. 入れ子になったリストと反復処理
← Python Academyに戻る