Каков правильный способ подсчета общего числа при итерации генератора?

Мне всегда говорят, что встроенный список можно использовать, когда вам нужно подсчитать количество и повторить одновременно.

Например, это распространенная идиома в Python (функция gen возвращает генератор):

 for index, item in enumerate(gen()): # Do something with item # get the numbers consumed from generator print("% number of items processed" % (index+1,)) 

Но если генератор ничего не возвращает? например, enumerate(range(0)) , переменная index будет неопределенной.

Мы можем определить index переменную перед циклом for, но есть ли еще какие-то питонические решения, о которых я не знал?

2 Solutions collect form web for “Каков правильный способ подсчета общего числа при итерации генератора?”

enumerate(gen(), start=1) будет начинать подсчет index с 1, устраняя необходимость в index+1 . В противном случае, я думаю, что у вас уже есть Pythonic.

 index = 0 for index, item in enumerate(gen(), start=1): # Do something with item print("%d number of items processed" % (index,)) 

Если вы намереваетесь снова использовать index , то просто инициализируйте его выше цикла for как вы сказали. В этом нет ничего «не-питонического».

Если вы не уверены, что index будет определен, вы всегда можете использовать try / except:

 >>> from __future__ import print_function # for Python 2 compatibility >>> import sys >>> >>> for i, j in enumerate(range(0)): ... pass ... >>> try: ... print(i) ... except NameError: ... print('i was not defined', file=sys.stderr) ... i was not defined 
  • Захват вывода на печать из общей библиотеки, вызванный из python с модулем ctypes
  • скрипт для открытия веб-браузера и ввода данных
  • Python WindowsError: Неверное имя файла, имени каталога или тома:
  • PyCharm: «Упростите сопоставленное сочетание»
  • следующее число с отдельными цифрами CCC 2013 старший 1
  • Варианты множественного входа (Google / Facebook / Twitter)
  • Как анализировать параметры без каких-либо аргументов с помощью модуля optparse
  • Как я могу установить флаги компилятора Cython при использовании pyximport?
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.