teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2018/03/20 05:59

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -44,4 +44,89 @@
44
44
  . . 0 0 0 0 0 . .
45
45
  . . . 0 0 0 . . .
46
46
  . . . . 0 . . . .
47
- ```
47
+ ```
48
+
49
+ コメントを受けて
50
+ ---
51
+ **リスト内包表記**
52
+ このような`[i for i in range(10)]`リストの作り方のことです。
53
+ 覚えていて損することはないので、少しずつ慣れていくと良いと思います。
54
+ [Qiita - 内包表記を使ってリストの作成を簡潔に書く](https://qiita.com/tag1216/items/040e482f9844805bce7f)
55
+
56
+ ---
57
+ **論理的な流れ**
58
+ 『右へ90度回転』は、例えば次のどちらかで実現することが可能です。
59
+ - 行列を転置した後、左右を反転させる
60
+ - 上下を反転させた後、行列を転置させる
61
+
62
+ 今回は後者の方法を採用しています。
63
+
64
+ **上下の反転**
65
+ `reversed`を用いて実現しています。
66
+ ```Python
67
+ tmp = [
68
+ [i*j for j in range(4)] for i in range(4)
69
+ ]
70
+
71
+ for row in tmp:
72
+ print(*row)
73
+
74
+ print()
75
+ for row in reversed(tmp):
76
+ print(*row)
77
+
78
+ """標準出力
79
+ 0 0 0 0
80
+ 0 1 2 3
81
+ 0 2 4 6
82
+ 0 3 6 9
83
+
84
+ 0 3 6 9
85
+ 0 2 4 6
86
+ 0 1 2 3
87
+ 0 0 0 0
88
+ """
89
+ ```
90
+
91
+ **転置**
92
+ `zip(各行)`を用いて実現しています。
93
+ ```Python
94
+ tmp = [[1, 2], [3, 4]]
95
+
96
+ for row in tmp:
97
+ print(row)
98
+
99
+ print()
100
+ for row in zip([1, 2], [3, 4]):
101
+ print(row)
102
+
103
+ print()
104
+ for row in zip(tmp[0], tmp[1]):
105
+ print(row)
106
+
107
+ print()
108
+ for row in zip(*tmp):
109
+ print(row)
110
+
111
+ """標準出力
112
+ [1, 2]
113
+ [3, 4]
114
+
115
+ (1, 3)
116
+ (2, 4)
117
+
118
+ (1, 3)
119
+ (2, 4)
120
+
121
+ (1, 3)
122
+ (2, 4)
123
+ """
124
+ ```
125
+
126
+ ---
127
+ **アスタリスクの意味**
128
+ mkgreiさんがコメントされているとおり、**アンパック**という機能です。
129
+ リストやタプルの要素を分解して引数に順番に渡すことを意味します。
130
+
131
+ 私の書いたもので恐縮ですが、Pythonのアスタリスクの機能をまとめた記事です。
132
+ [Qiita - Python3.xのアスタリスク逆引き](https://qiita.com/LouiS0616/items/1bbe0a9bb93054f6c380)