[python] 1부터 시작하는 숫자 범위를 열거하는 방법

Python 2.5를 사용하고 있으며 열거 형을 원합니다 (0 대신 1에서 시작).

[(1, 2000), (2, 2001), (3, 2002), (4, 2003), (5, 2004)]

파이썬 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)]

파이썬 2.5에서 원하는 결과를 얻는 방법을 아는 사람이 있습니까?

감사,

제프



답변

이미 언급했듯이 이것은 Python 2.6 이상에서 간단합니다.

enumerate(range(2000, 2005), 1)

Python 2.5 및 이전 버전은 start매개 변수를 지원하지 않으므로 두 개의 범위 오브젝트를 작성하고 압축 할 수 있습니다.

r = xrange(2000, 2005)
r2 = xrange(1, len(r) + 1)
h = zip(r2, r)
print h

결과:

[(1, 2000), (2, 2001), (3, 2002), (4, 2003), (5, 2004)]

목록 대신 생성기를 생성하려면 izip을 대신 사용할 수 있습니다 .


답변

이것을 후손을 위해 여기에두기 위해 2.6에서 “start”매개 변수가 다음과 같이 열거되었습니다.

enumerate(sequence, start=1)


답변

쉽고, 원하는 것을 수행하는 자신의 기능을 정의하십시오.

def enum(seq, start=0):
    for i, x in enumerate(seq):
        yield i+start, x


답변

파이썬 3

공식 문서 : enumerate(iterable, start=0)

따라서 다음과 같이 사용하십시오.

>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']

>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]

>>> list(enumerate(seasons, start=1))
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]


답변

파이썬 2.5에서 가장 간단한 방법은 당신이 묻는 것입니다.

import itertools as it

... it.izip(it.count(1), xrange(2000, 2005)) ...

표시되는 것처럼 목록을 원하면 zip대신 사용하십시오 it.izip.

(BTW, 일반적으로, 가장 좋은 방법은 발전기의 목록을 만들거나 다른 반복 가능한 X는 하지 [x for x in X] 않고 있지만 list(X)).


답변

from itertools import count, izip

def enumerate(L, n=0):
    return izip( count(n), L)

# if 2.5 has no count
def count(n=0):
    while True:
        yield n
        n+=1

이제 h = list(enumerate(xrange(2000, 2005), 1))작동합니다.


답변

열거는 사소한 일이므로 시작을 수락하도록 다시 구현합니다.

def enumerate(iterable, start = 0):
    n = start
    for i in iterable:
        yield n, i
        n += 1

이것은 start 인수없이 enumerate를 사용하여 코드를 중단하지 않습니다. 또는이 oneliner는보다 우아하고 빠를 수 있지만 열거의 다른 사용을 중단합니다.

enumerate = ((index+1, item) for index, item)

후자는 순수한 넌센스였습니다. @ 던컨 래퍼 권리가 있습니다.