Я столкнулся со случаем использования перечислителя для выбранных элементов, формирующих итерируемый (т.е. последовательность или итератор или аналогичный) и хотите, чтобы возвращались исходные индексы вместо count
по умолчанию, начиная с 0
и заканчивая len(iterable) - 1
.
Очень наивным подходом было бы объявление нового объекта-генератора с именем _enumerate()
>>> def _enumerate(iterable, offset = 0, step = 1):
index = offset
for element in iterable:
yield index, element
index += step
... новый объект списка months
.
>>> months = ["January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"]
Использование встроенной функции enumerate
в Python даст следующие выходные данные для среза [5::2]
:
>>> for index, element in enumerate(months[5::2]):
print(index, element)
0 June
1 August
2 October
3 December
Ожидаемый вывод нашего собственного счетчика _enumerate
снова для среза [5::2]
:
>>> for index, element in _enumerate(months[5::2], offset = 5, step = 2):
print(index, element)
5 June
7 August
9 October
11 December
Знаете ли вы какие-нибудь лучшие, более питонические и более читабельные решения? :)
i*step+offset
? Должен также дать вам желаемые индексы... - person swenzel   schedule 29.07.2015_enumerate
также выполнял нарезку (т. е. называл бы это_enumerate(month, offset=5, step=2
), но это потребовало бы, чтобыmonths
был списком, чтобы быть эффективным. - person skyking   schedule 29.07.2015index * step + offset
? - person elegent   schedule 29.07.2015print(index*2+5, element)
с обычным перечислением также даст вам 5 июня, 7 августа... Или вы можете поставитьindex = index*step+offset
в качестве первой строки в цикле. - person swenzel   schedule 29.07.2015