回答編集履歴
2
コメント
answer
CHANGED
@@ -9,19 +9,20 @@
|
|
9
9
|
[0,0]]
|
10
10
|
|
11
11
|
def search_target(lst, target):
|
12
|
-
h = len(lst)
|
12
|
+
h = len(lst) # 高さ
|
13
|
-
w = len(lst[0])
|
13
|
+
w = len(lst[0]) # 幅
|
14
|
-
t_h = len(target)
|
14
|
+
t_h = len(target) # 検索対象の高さ
|
15
|
-
t_w = len(target[0])
|
15
|
+
t_w = len(target[0]) # 検索対象の幅
|
16
|
-
loop_h = h - t_h + 1
|
16
|
+
loop_h = h - t_h + 1 # 縦方向のループ回数(検索対象の高さに被らないところまで+検索対象と同じ高さ分)
|
17
|
-
loop_w = w - t_w + 1
|
17
|
+
loop_w = w - t_w + 1 # 横方向のループ回数
|
18
18
|
|
19
|
-
def get_partial(i, j):
|
19
|
+
def get_partial(i, j): # indexから部分リストを返す
|
20
|
-
return [row[j:j+t_w] for row in lst[i:i+t_h]]
|
20
|
+
return [row[j:j+t_w] for row in lst[i:i+t_h]] # lst[i:i+t_h]でまず垂直方向に取り出す。取り出した各行を今度はrow[j:j+t_w]で水平方向に切り出す
|
21
21
|
|
22
|
+
# ループ
|
22
|
-
for i in range(loop_h):
|
23
|
+
for i in range(loop_h):
|
23
24
|
for j in range(loop_w):
|
24
|
-
if target == get_partial(i,j):
|
25
|
+
if target == get_partial(i,j): # 部分リストと検索対象が一致したら位置を返す
|
25
26
|
return (i, j)
|
26
27
|
return None
|
27
28
|
|
1
微妙に簡略化
answer
CHANGED
@@ -21,8 +21,7 @@
|
|
21
21
|
|
22
22
|
for i in range(loop_h):
|
23
23
|
for j in range(loop_w):
|
24
|
-
partial = get_partial(i,j)
|
25
|
-
if target ==
|
24
|
+
if target == get_partial(i,j):
|
26
25
|
return (i, j)
|
27
26
|
return None
|
28
27
|
|