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

回答編集履歴

2

コメント

2018/06/24 14:28

投稿

hayataka2049
hayataka2049

スコア30939

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

微妙に簡略化

2018/06/24 14:28

投稿

hayataka2049
hayataka2049

スコア30939

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 == partial:
24
+ if target == get_partial(i,j):
26
25
  return (i, j)
27
26
  return None
28
27