擅长:python、mysql、java
<p>必须在列表上重复多次并不优雅。</p>
<p>我可能会创建一个允许执行以下操作的函数:</p>
<pre><code>twos, threes = countmatching(xrange(1,10),
lambda a: a % 2 == 0,
lambda a: a % 3 == 0)
</code></pre>
<p>起点应该是这样的:</p>
<pre><code>def countmatching(iterable, *predicates):
v = [0] * len(predicates)
for e in iterable:
for i,p in enumerate(predicates):
if p(e):
v[i] += 1
return tuple(v)
</code></pre>
<p>顺便说一句,“itertools菜谱”有一个做得很像你的alt4的菜谱。</p>
<pre><code>def quantify(seq, pred=None):
"Count how many times the predicate is true in the sequence"
return sum(imap(pred, seq))
</code></pre>