想象一下,您需要计算满足某些iterable
的{{1}}元素的数量 - 是否有更好的方法来执行此操作?
它当然是python3。但是2也很好。
我无法在criteria
或collections
python模块或内置插件中找到任何合适的内容。
答案 0 :(得分:4)
尝试quantify
recipes中的itertools
食谱:
def quantify(iterable, pred=bool):
"Count how many times the predicate is true"
return sum(map(pred, iterable))
more_itertools
已经实现了这个配方,所以它更加紧凑:
>>> import more_itertools as mit
>>> iterable = [True, False, True, True]
>>> mit.quantify(iterable)
3
进行比较:
>>> #len(list(filter(lambda x: criteria, iterable)))
>>> len(list(filter(lambda x: x is True, iterable)))
3
<强>性能强>
# A: len(list(filter(lambda x: criteria, iterable)))
>>> %timeit -n 1000000 len(list(filter(lambda i: i is True, iterable)))
1000000 loops, best of 3: 2.48 µs per loop
# B: quantify(iterable, pred=condition)
>>> %timeit -n 1000000 mit.quantify(iterable)
1000000 loops, best of 3: 1.87 µs per loop
# C: ilen(item for item in iterable if condition)
>>> %timeit -n 1000000 mit.ilen(i for i in iterable if i is True)
1000000 loops, best of 3: 5.27 µs per loop
# D: len([item for item in iterable if condition])
>>> %timeit -n 1000000 len([i for i in iterable if i is True])
1000000 loops, best of 3: 973 ns per loop
# E: sum(1 for _ in iterable if condition)
>>> %timeit -n 1000000 sum(1 for i in iterable if i is True)
1000000 loops, best of 3: 1.34 µs per loop
quantify
,itertools
食谱more_itertools.ilen
进行评估sum(1 for _ in ...)
成语虽然more_itertools.quantify
是简洁的,但如果不是更快,那么惯用的生成器表达式就会相同。然而,经典列表理解(由@宏杰李首先提出)是表现最佳的。
另请参阅thread将len()
扩展到生成器。
答案 1 :(得分:3)
sum(1 for i in A if condition(i))
答案 2 :(得分:1)
列表推导提供了创建列表的简明方法。共同 应用程序将创建新列表,其中每个元素都是结果 一些操作应用于另一个序列的每个成员或 可迭代的,或创建满足a的元素的子序列 某种条件。
>>> squares = []
>>> for x in range(10):
... squares.append(x**2)
...
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
请注意,这会创建(或覆盖)名为x的变量 循环完成后存在。我们可以计算出正方形列表 没有任何副作用使用:
squares = list(map(lambda x: x**2, range(10)))
或等同于:
squares = [x**2 for x in range(10)]
而不仅仅是把你的条件放在像这样的if语句中
>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
您有一个符合条件的元素列表,您可以使用len(lsit_)
来计算元素