range(len(list)) or enumerate(list)?

Possible Duplicate:
Only index needed: enumerate or (x)range?

Which of these would be considered better/clearer/faster/more 'Pythonic'? I don't care about the content of the list L , just how long it is.

a = [f(n) for n, _ in enumerate(L)]

or

a = [f(n) for n in range(len(L))]

If it makes any difference, the function f makes use of len(list) as well.


Some quick timing runs seem to give the 2nd option using range() a slight edge over enumerate() :

timeit a = [f(n) for n, _ in enumerate(mlist)]
10000 loops, best of 3: 118 us per loop

timeit a = [f(n) for n in range(len(mlist))]
10000 loops, best of 3: 102 us per loop

and just for fun using xrange() (Python v2.7.2)

timeit a = [f(n) for n in xrange(len(mlist))]
10000 loops, best of 3: 99 us per loop

I would favor readable code first, then using xrange() if available (ie, Pre-Python v 3.x), followed by range() and enumerate() .


The (x)range solution is faster, because it has less overhead, so I'd use that.

In Python 2.x, use xrange instead of range , because xrange uses less memory, because it doesn't create a temporary list. In Python 3.x, there is only range , which is the less-memory version.


Assuming you're using Python 2.x, if you use len() , you should use xrange() as it will avoid creating a list of the numbers in the range.

And in this case, I'd go with len() because you are using the indices, not the items in the list.

链接地址: http://www.djcxy.com/p/4102.html

上一篇: 你如何将一个列表分成均匀大小的块?

下一篇: 范围(len(list))或枚举(list)?