Python中计算数值的数量

3

我有一个列表,看起来像这样:

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函数会统计所有出现次数。 但我想不用循环怎么做呢?我已经有两个循环了,不想再加一个。 谢谢。

4
这不是 Python 的列表,供您参考。 - Henrik Andersson
为什么不在计数之前对列表进行切片呢?就像这样 count(Lux[14:16]) - user707650
Evert, 我想要像这样的东西: valueInLux = Lux[i] #Lux[i] = 0 LuxNumberOfRows = Lux.count(valueInLux)其中Lux是一个列表,但我只想从14到16运行。 - shlomi
1个回答

10

使用 list.countslicing

>>> 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和切片正是我所需!谢谢! - shlomi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接