Я использую Python 2.5, я хочу перечисление как так (начиная с 1 вместо 0):
[(1, 2000), (2, 2001), (3, 2002), (4, 2003), (5, 2004)]
Я знаю, что в Python 2.6 вы можете сделать: h = enumerate (range (2000, 2005), 1), чтобы получить вышеуказанный результат, но в python2.5 вы не можете ...
Использование python2.5:
>>> h = enumerate(range(2000, 2005))
>>> [x for x in h]
[(0, 2000), (1, 2001), (2, 2002), (3, 2003), (4, 2004)]
Кто-нибудь знает способ получить желаемый результат в Python 2.5?
Спасибо,
Джефф
Ответы:
Как вы уже упоминали, это легко сделать в Python 2.6 или новее:
Python 2.5 и старше не поддерживают
start
параметр, поэтому вместо этого вы можете создать два объекта диапазона и сжать их:Результат:
Если вы хотите создать генератор вместо списка, вы можете использовать izip .
источник
izip
иxrange
буду ближе перечислятьenumerate(iterable, start=1)
Python 2.6.Просто чтобы поставить это здесь для потомков, в 2.6 был добавлен параметр "start" для перечисления следующим образом:
enumerate(sequence, start=1)
источник
sequence[i]
в своем коде.Легко, просто определите свою собственную функцию, которая делает то, что вы хотите:
источник
Python 3
Официальная документация:
enumerate(iterable, start=0)
Так что вы бы использовали это так:
источник
Простейший способ сделать в Python 2.5 именно то, о чем вы спрашиваете:
Если вы хотите список, как вам кажется, используйте
zip
вместоit.izip
.(Кстати, как правило, лучший способ составить список из генератора или любого другого итерируемого X - нет
[x for x in X]
, а скорееlist(X)
).источник
Сейчас
h = list(enumerate(xrange(2000, 2005), 1))
работает.источник
Перечисление является тривиальным, и поэтому повторно реализует его, чтобы принять начало:
Обратите внимание, что это не нарушает код, используя перечисление без начального аргумента.
Кроме того, этот oneliner может быть более элегантным и, возможно, более быстрым, но нарушает другое использование перечисления:Последнее было чистой ерундой. @ Дункан правильно понял.
источник
источник
h = [(i + 1, x) for i, x in enumerate(xrange(2000, 2005))]
источник
++
: это способ сделать этоХорошо, я чувствую себя немного глупо здесь ... в чем причина, чтобы просто не делать это с чем-то вроде
[(a+1,b) for (a,b) in enumerate(r)]
? Если вы не будете работать, не проблема:источник
Поскольку это несколько многословно, я бы порекомендовал написать собственную функцию для ее обобщения:
источник
Я не знаю, как эти посты можно сделать более сложными, чем следующие:
источник