我有一个列表,看起来像这样:
Lux = ([ 0 0 0 0 0 120 120 120 120 120 240 240 240 240 240 0 0 0 0 0 120 120 120 120 120])
我希望能够统计从第14位到第16位的零的数量,答案会是2。 我知道count函数会统计所有出现次数。 但我想不用循环怎么做呢?我已经有两个循环了,不想再加一个。 谢谢。
使用 list.count
和 slicing
:
>>> lis = [0, 0, 0, 0, 0, 120, 120, 120, 120, 120, 240, 240, 240, 240, 240, 0, 0, 0, 0, 0, 120, 120, 120, 120, 120]
>>> lis[14:].count(0)
5
>>> lis[14:17].count(0)
2
另一种选项是使用sum
和生成器表达式,但与list.count
相比,这将非常缓慢:
>>> sum(1 for i in xrange(14, len(lis)) if lis[i]==0)
5
>>> sum(1 for i in xrange(14, 17) if lis[i]==0)
2
时序比较:
In [4]: lis = [0, 0, 0, 0, 0, 120, 120, 120, 120, 120, 240, 240, 240, 240, 240, 0, 0, 0, 0, 0, 12
0, 120, 120, 120, 120]*10**5
In [5]: %timeit lis[14:].count(0)
10 loops, best of 3: 64.7 ms per loop
In [6]: %timeit sum(1 for i in xrange(14, len(lis)) if lis[i]==0)
1 loops, best of 3: 307 ms per loop
count(Lux[14:16])
。 - user707650