擅长:python、mysql、java
<p>这听起来像是你在处理长名单,这就是为什么这是昂贵的。如果你能在符合条件的情况下尽早退出就好了。<code>any()</code>将执行此操作,但您希望避免在传递给<code>any()</code>之前读取整个列表。一个选项可能是使用<code>itertools.accumulate</code>来保持<code>True</code>值的运行总数,并将其传递给任何一个值。比如:</p>
<pre><code>from itertools import accumulate
a = [1, 2, 2, 3, 4, 2, 4, 1, 1, 1]
# true if 50% are greater than 1
goal = .5 * len(a) # at least 5 out of 10
any( x > goal for x in accumulate(n > 1 for n in a))
</code></pre>
<p><code>accumulate</code>不需要读取整个列表-它只会开始传递到该点所看到的真值的数量。<code>any</code>应该在找到一个真值后立即短路,在上面的例子中,这个真值位于索引5处。你知道吗</p>