2016-12-01 6 views
-1

Очевидно, что если мы это сделаем, то счетчик будет оставаться на 0, как это сбрасывается в начале каждой итерации:Создание счетчика внутри Python для петли

for thing in stuff: 
    count = 0 
    print count 
    count =+1 
    write_f.write(thing) 

Но поскольку у меня есть этот код внутри функция, она не работает, чтобы сделать это либо:

count=0 
for thing in stuff: 
    print count 
    count =+1 
    write_f.write(thing) 

у меня есть несколько различных уровней отступа, и независимо от того, как я двигаю count=0 о, это либо не без эффекта или бросает UnboundLocalError: local variable 'count' referenced before assignment. Есть ли способ создать простой счетчик взаимодействия непосредственно внутри цикла for?

+3

'count = + 1' ->' count + = 1' –

+0

Неправда. Ваш второй код работает отлично (кроме того, что указывает Джонни). Вам нужно показать фактический код и ошибку. –

+1

Вы также можете использовать 'enumerate'. 'для count, вещь в перечислении (материал):' – Shaun

ответ

11

Это (создание дополнительной переменной перед циклом) является не pythonic.

вещий способ перебрать элементы, имея дополнительный счетчик использует enumerate:

for index, item in enumerate(iterable): 
    print(index, item) 

Так, например, для списка lst это будет:

lst = ["a", "b", "c"] 

for index, item in enumerate(lst): 
    print(index, item) 

... и генерируют выход:

0 a 
1 b 
2 c 

Настоятельно рекомендуется всегда использовать Python's built-in functions для создания «питоновых решений», когда это возможно. Существует также документация для enumerate.


Если Вам необходима дополнительная информация о перечислю, вы можете посмотреть PEP 279 -- The enumerate() built-in function.

+0

Это та же информация, что и связанный дубликат. Он должен был быть просто закрыт как дубликат. –

+0

Вы правы. Тем не менее, я не знал о дублировании при создании ответа (я опубликовал ответы через минуту после исходного вопроса, за 40 минут до маркировки как дубликата). – daniel451

+0

Я поставил вопрос как дубликат ~ через 30 секунд после его публикации. Когда вы ответили, был ожидающий дубликат. –

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