擅长:python、mysql、java
<p>你想在这里做的其实是可行的,只是不能用列表。如果使用<a href="http://www.numpy.org/" rel="nofollow">numpy</a>数组,则可以将其转换为算术表达式,并在整个数组中自动广播:</p>
<pre><code>>>> import numpy as np
>>> primes = np.array([2, 3, 5, 7, 11])
>>> 18 % primes
array([0, 0, 3, 4, 7])
>>> 18 % primes == 0
array([ True, True, False, False, False], dtype=bool)
>>> primes[18 % primes == 0]
array([2, 3])
</code></pre>
<p>这正是你想做的,几乎完全是你想做的方式,它的工作方式和你期望的一样。你知道吗</p>
<p>这显然更简洁,而且几乎总是更高效;更重要的是,它通常更具可读性。你知道吗</p>
<hr/>
<p>如果你想找到重复的因素呢?好吧,你可以把整个数组平方,然后把它立方,依此类推:</p>
<pre><code>>>> primes[18 % (primes**2) == 0]
array([3])
>>> primes[18 % (primes**3) == 0]
array([])
</code></pre>
<p>或者,更有效地,您可以将工作限制为仅过滤掉的数组,并以更少的工作获得相同的结果:</p>
<pre><code>>>> factors = primes[18 % primes == 0]
>>> factors2 = factors[18 % (factors**2) == 0]
>>> factors2
array([3])
</code></pre>