我使用的是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中你不能…

使用Python 2.5:

>>> h = enumerate(range(2000, 2005))
>>> [x for x in h]
[(0, 2000), (1, 2001), (2, 2002), (3, 2003), (4, 2004)]

有没有人知道在Python 2.5中如何获得想要的结果?


当前回答

只是为了子孙后代起见,在2.6中添加了"start"参数来枚举:

列举(序列,开始= 1)

其他回答

H = [(i + 1, x) for i, x in enumerate(xrange(2000, 2005))]

只是为了子孙后代起见,在2.6中添加了"start"参数来枚举:

列举(序列,开始= 1)

>>> list(enumerate(range(1999, 2005)))[1:]
[(1, 2000), (2, 2001), (3, 2002), (4, 2003), (5, 2004)]

很简单,只要定义你自己想要的函数:

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

在Python 2.5中最简单的方法是:

import itertools as it

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

如果您需要一个列表,就像您看起来的那样,使用zip来代替它。

(顺便说一句,作为一般规则,从生成器或任何其他可迭代对象X中创建列表的最佳方法不是[X for X in X],而是list(X))。