2015-01-05 3 views
3

Можно ли написать список для следующего цикла?Python - ведение счетчика внутри списка.

m = [] 
counter = 0 
for i, x in enumerate(l): 
    if x.field == 'something': 
     counter += 1 
     m.append(counter/i) 

Я не знаю, как увеличить счетчик внутри понимания списка.

+2

Обратите внимание, что это может привести к в делении на ноль, если первый (т. е. «нулевой») элемент удовлетворяет условию. Кроме того, что именно вы пытаетесь достичь? –

+0

Вы правы. Я написал этот код «на лету», и я забываю увеличивать на 1 i. Я хочу вычислить [среднюю точность] (https://en.wikipedia.org/wiki/Information_retrieval#Average_precision) – user2297037

ответ

9

Вы можете использовать itertools.count:

import itertools as IT 
counter = IT.count(1) 
[next(counter)/i for i, x in enumerate(l) if x.field == 'something'] 

Чтобы избежать возможного ZeroDivisionError указал tobias_k, вы могли бы сделать enumerate начать отсчет с 1 с помощью enumerate(l, start=1):

[next(counter)/i for i, x in enumerate(l, start=1) 
if x.field == 'something'] 
Смежные вопросы