擅长:python、mysql、java
<pre><code>#how does this work?
return sum(
pattern == [ row[ j:j + ncols ] for row in area[ i:i + nrows ] ]
for i in xrange( len( area ) - nrows + 1 )
for j in xrange( len( area[i] ) - ncols + 1 )
)
</code></pre>
<p>可以使用显式for循环块重写生成器表达式:</p>
^{pr2}$
<p>比较(<code>pattern == ..</code>)返回True/False,在Python中等于1/0。在</p>
<p>构建子矩阵以与模式进行比较的列表理解可以优化为更早返回:</p>
<pre><code>count += all(pattern_row == row[j:j + ncols]
for pattern_row, row in zip(pattern, area[i:i + nrows]))
</code></pre>
<p>或使用显式for循环块:</p>
<pre><code>for pattern_row, row in zip(pattern, area[i:i + nrows]):
if pattern_row != row[j:j + ncols]:
break # no match (the count stays the same)
else: # matched (no break)
count += 1 # all rows are equal
</code></pre>