ネストされたリスト内包表記
2次元リストを扱うとき、リスト内包表記を使って要素を反復処理することができます。
grid = [
[10, 20, 30],
[40, 50, 60],
]
squared = [[i * i for i in row] for row in grid]
print(squared)
# [[100, 400, 900], [1600, 2500, 3600]]
ここでは、外側のループで
grid
を行ごとに反復処理し、その中で各行の要素を反復処理しています。結果を2次元リストにしたくない場合、内側の角括弧を省略し、
for i in row
を内側のループから外に出すことで、grid
をフラットにすることができます。まずfor row in grid
でgrid
を反復処理し、次にfor i in row
で各要素を処理します。grid = [
[10, 20, 30],
[40, 50, 60],
]
squared = [i * i for row in grid for i in row]
print(squared)
# [100, 400, 900, 1600, 2500, 3600]
チャレンジ
リスト内包表記を使って、チェスボードの全ての座標を出力できますか?
数字は1から8まで、文字は
A B C D E F G H
です。番号付けはA1 B1 C1 ... H1
のようになり、次の行はA2 B2 C2 ... H2
と続きます。各行を別々に出力してください。Output
A1 B1 C1 D1 E1 F1 G1 H1
A2 B2 C2 D2 E2 F2 G2 H2
A3 B3 C3 D3 E3 F3 G3 H3
A4 B4 C4 D4 E4 F4 G4 H4
A5 B5 C5 D5 E5 F5 G5 H5
A6 B6 C6 D6 E6 F6 G6 H6
A7 B7 C7 D7 E7 F7 G7 H7
A8 B8 C8 D8 E8 F8 G8 H8
ヒント
print
メソッドのend
パラメータを使って、改行を出力するかどうかを一行で条件分岐できます。Constraints
Time limit: 2 seconds
Memory limit: 512 MB
Output limit: 1 MB