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)
후자는 순수한 넌센스였습니다. @ 던컨 래퍼 권리가 있습니다.