2013-12-02 5 views
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. Я знаю, что функция подсчета подсчитывает весь внешний вид. Как я могу это сделать, но с петлей? Я хочу это, когда я уже в два цикла, и не хочу добавлять еще один.

спасибо.

+4

Это не список питонов, FYI. –

+0

Почему бы вам не нарезать список, прежде чем считать? Что-то вроде 'count (Lux [14:16])'. – Evert

+0

Не Мелкая :-) – shlomi

ответ

10

Использование 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 

Timing сравнения:

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 
+0

list.count и нарезка была именно то, что мне нужно! Спасибо! – shlomi

Смежные вопросы