Estou usando o Python 2.5, quero uma enumeração como essa (começando em 1 em vez de 0):
[(1, 2000), (2, 2001), (3, 2002), (4, 2003), (5, 2004)]
Eu sei que no Python 2.6 você pode fazer: h = enumerar (range (2000, 2005), 1) para dar o resultado acima, mas no python2.5 você não pode ...
Usando python2.5:
>>> h = enumerate(range(2000, 2005))
>>> [x for x in h]
[(0, 2000), (1, 2001), (2, 2002), (3, 2003), (4, 2004)]
Alguém sabe uma maneira de obter o resultado desejado no python 2.5?
Obrigado,
Jeff
Respostas:
Como você já mencionou, isso é simples de fazer no Python 2.6 ou mais recente:
O Python 2.5 e mais antigo não suportam o
start
parâmetro, portanto, você pode criar dois objetos de intervalo e compactá-los:Resultado:
Se você deseja criar um gerador em vez de uma lista, use o izip .
fonte
izip
exrange
estaria mais próximo para enumerarenumerate(iterable, start=1)
como no Python 2.6.Apenas para colocar isso aqui por motivos de posteridade, no 2.6, o parâmetro "start" foi adicionado para enumerar da seguinte forma:
enumerate(sequence, start=1)
fonte
sequence[i]
no seu código.Fácil, basta definir sua própria função que faz o que você deseja:
fonte
Python 3
Documentação oficial:
enumerate(iterable, start=0)
Então você usaria assim:
fonte
A maneira mais simples de fazer no Python 2.5 exatamente o que você pergunta:
Se você deseja uma lista, como parece, use
zip
em vez deit.izip
.(Como regra geral, a melhor maneira de fazer uma lista com um gerador ou qualquer outro X iterável não é
[x for x in X]
, mas simlist(X)
).fonte
Agora
h = list(enumerate(xrange(2000, 2005), 1))
funciona.fonte
enumerar é trivial e, portanto, é reimplementá-lo para aceitar um início:
Observe que isso não quebra o código usando enumerate sem o argumento start.
Como alternativa, esse oneliner pode ser mais elegante e possivelmente mais rápido, mas quebra outros usos do enumerate:O último foi pura bobagem. @Duncan acertou a embalagem.
fonte
fonte
h = [(i + 1, x) for i, x in enumerate(xrange(2000, 2005))]
fonte
++
: Essa é a maneira de fazê-loOk, eu me sinto um pouco estúpido aqui ... qual é o motivo para não fazer isso com algo parecido
[(a+1,b) for (a,b) in enumerate(r)]
? Se você não funcionar, não há problema:fonte
Como isso é um pouco detalhado, eu recomendo escrever sua própria função para generalizá-la:
fonte
Não sei como essas postagens poderiam ser mais complicadas do que as seguintes:
fonte