Как перечислить список нестроковых объектов в Python? - PullRequest
5 голосов
/ 07 июня 2009

Есть хороший класс Enum из enum, но он работает только для строк. Я сейчас использую:

    for index in range(len(objects)):
        # do something with index and objects[index]

Я думаю, это не оптимальное решение из-за преждевременного использования len. Как это можно сделать эффективнее?

1 Ответ

13 голосов
/ 07 июня 2009

Вот питонский способ написать этот цикл:

for index, obj in enumerate(objects):
  # Use index, obj.

enumerate работает на любой последовательности независимо от типов ее элементов. Это встроенная функция.

Edit:

После выполнения некоторых timeit тестов с использованием Python 2.5 я обнаружил, что enumerate немного медленнее:

>>> timeit.Timer('for i in xrange(len(seq)): x = i + seq[i]', 'seq = range(100)').timeit()
10.322299003601074
>>> timeit.Timer('for i, e in enumerate(seq): x = i + e', 'seq = range(100)').timeit()
11.850601196289062
...