初心者あるあるエラーですね。解決策もそれで正しいです。
慣れないうちはハマりやすいので、リストを作る際は内包表記を優先するのが良いでしょう。
Qiita - pythonでのリストの要素の変更とリストのコピー
せっかくなので、別解もご紹介します。(リストを非対象に変更しました)
Python
1grid = [
2 ['.', '0', '.', '.', '.', '.'],
3 ['.', '0', '0', '.', '.', '.'],
4 ['0', '0', '0', '0', '.', '.'],
5 ['0', '0', '0', '0', '0', '.'],
6 ['.', '0', '0', '0', '0', '0'],
7 ['0', '0', '0', '0', '0', '.'],
8 ['0', '0', '0', '0', '.', '.'],
9 ['.', '0', '0', '.', '.', '.'],
10 ['.', '.', '.', '.', '.', '.'],
11]
12
13for row in grid:
14 print(*row, sep=' ')
15
16print()
17
18for row in zip(*reversed(grid)):
19 print(*row, sep=' ')
実行結果 Wandbox
plain
1. 0 . . . .
2. 0 0 . . .
30 0 0 0 . .
40 0 0 0 0 .
5. 0 0 0 0 0
60 0 0 0 0 .
70 0 0 0 . .
8. 0 0 . . .
9. . . . . .
10
11. . 0 0 . 0 0 . .
12. 0 0 0 0 0 0 0 0
13. 0 0 0 0 0 0 0 .
14. . 0 0 0 0 0 . .
15. . . 0 0 0 . . .
16. . . . 0 . . . .
コメントを受けて
リスト内包表記
このような[i for i in range(10)]
リストの作り方のことです。
覚えていて損することはないので、少しずつ慣れていくと良いと思います。
Qiita - 内包表記を使ってリストの作成を簡潔に書く
論理的な流れ
『右へ90度回転』は、例えば次のどちらかで実現することが可能です。
- 行列を転置した後、左右を反転させる
- 上下を反転させた後、行列を転置させる
今回は後者の方法を採用しています。
上下の反転
reversed
を用いて実現しています。
Python
1tmp = [
2 [i*j for j in range(4)] for i in range(4)
3]
4
5for row in tmp:
6 print(*row)
7
8print()
9for row in reversed(tmp):
10 print(*row)
11
12"""標準出力
130 0 0 0
140 1 2 3
150 2 4 6
160 3 6 9
17
180 3 6 9
190 2 4 6
200 1 2 3
210 0 0 0
22"""
転置
zip(各行)
を用いて実現しています。
Python
1tmp = [[1, 2], [3, 4]]
2
3for row in tmp:
4 print(row)
5
6print()
7for row in zip([1, 2], [3, 4]):
8 print(row)
9
10print()
11for row in zip(tmp[0], tmp[1]):
12 print(row)
13
14print()
15for row in zip(*tmp):
16 print(row)
17
18"""標準出力
19[1, 2]
20[3, 4]
21
22(1, 3)
23(2, 4)
24
25(1, 3)
26(2, 4)
27
28(1, 3)
29(2, 4)
30"""
アスタリスクの意味
mkgreiさんがコメントされているとおり、アンパックという機能です。
リストやタプルの要素を分解して引数に順番に渡すことを意味します。
私の書いたもので恐縮ですが、Pythonのアスタリスクの機能をまとめた記事です。
Qiita - Python3.xのアスタリスク逆引き
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/19 19:50
2018/03/20 00:49 編集
2018/03/20 06:01
2018/03/21 22:02
2018/03/21 22:07