擅长:python、mysql、java
<p>我想说的是,加速的方法是使用列表理解,并尝试只进行必要的操作。在白色的两个轴上都有一个图案->;黄色->;红色->;白色…,我们可以使用列表理解来分离这些颜色,然后找到每种颜色的总面积。
要在轴中分离颜色,我们可以使用:</p>
<pre><code>list[::3]
</code></pre>
<p>假设我们把w_列表[0]上的所有白色值加起来,乘以h_列表[0]上所有白色值的总和,我们将得到大约1/3的白色值。所以我们可以用h_list[1]对w_list[1]重复,用h_list[2]对w_list[2]重复。简言之,我要做的是用3个像这样的网格将白色分开</p>
<pre><code>W W W-
+ + +-
+ + +-
W W W-
+ + +-
</code></pre>
<p>一个与另一个稍微错位,并使用列表理解来隔离和获取区域,而无需嵌套for循环:</p>
<pre><code>def calculateAreas(w_list, h_list):
white = 0
yellow = 0
red = 0
for i, j in zip([0,1,2], [0,2,1]):
white += sum(w_list[i::3]) * sum(h_list[j::3])
yellow += sum(w_list[i::3]) * sum(h_list[(j+1)%3::3])
red += sum(w_list[i::3]) * sum(h_list[(j+2)%3::3])
return (white, yellow, red)
</code></pre>
<p>这样我们只通过了3次for循环,在一个包含100000个元素的列表中,我的慢速笔记本电脑上的计时为0.0904秒。如果我能给你一些关于代码的提示:1-尝试直接在列表元素上交互(使用枚举)2-使用'elif'和'else'语句(如果颜色选择'white',你不需要检查它是否为红色)。一般来说,如果您需要加快代码的速度,请尝试避免嵌套循环,想象一下将一个列表中的每个元素与另一个列表中的每个其他元素交互:这就是len(list)**2</p>