<p>您可以使用<code>filter</code>和<code>reduce</code>用<a href="https://docs.python.org/2/howto/functional.html" rel="nofollow noreferrer">functional approach</a>来求解它:</p>
<pre><code>def f(acc, v): return acc + v
def g(x): return x % 3 == 0 or x % 5 == 0
print reduce(f, filter(g, range(1000)))
</code></pre>
<p>工作原理:</p>
<ul>
<li><a href="https://docs.python.org/2/library/functions.html#filter" rel="nofollow noreferrer">filter</a>:接受两个参数:
<ol>
<li>第一个是应用于<code>range(1000)</code>的每个元素的函数<code>g</code>。<code>g</code>接受一个参数<code>x</code>,检查<code>if</code>是<code>3</code>或<code>5</code>的倍数(检查<a href="https://en.wikipedia.org/wiki/Modulo_operation" rel="nofollow noreferrer">modulo</a>操作<code>%</code>的其余部分)。你知道吗</li>
<li>第二个是从<code>0</code>到<code>1000</code>的<a href="https://docs.python.org/2/library/functions.html#range" rel="nofollow noreferrer">range</a>。你知道吗</li>
</ol></li>
<li><a href="https://docs.python.org/2/library/functions.html#reduce" rel="nofollow noreferrer">reduce</a>:接受两个参数:
<ol>
<li>第一个是一个函数<code>f</code>,它接受两个参数:一个累加器<code>acc</code>和一个表示列表中当前元素的变量<code>v</code>。你知道吗</li>
<li>第二个参数是前面由<code>filter</code>返回的经过筛选的<a href="https://docs.python.org/2/library/functions.html#range" rel="nofollow noreferrer">range</a>。你知道吗</li>
</ol></li>
</ul>
<p>输出:</p>
<ul>
<li>与<code>range(10)</code>=<code>23</code></li>
<li>与<code>range(1000)</code>=<code>233168</code></li>
</ul>
<p>使用<a href="http://www.secnetix.de/olli/Python/lambda_functions.hawk" rel="nofollow noreferrer">lambda</a>函数(相同的逻辑只是不同的语法):</p>
<pre><code>print reduce(lambda acc, v: acc + v, filter(lambda x: x % 3 == 0 or x % 5 == 0, range(1000)))
</code></pre>