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.
Assuming you're using Python 2.x, if you use
len()
, you should usexrange()
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.Some quick timing runs seem to give the 2nd option using
range()
a slight edge overenumerate()
:and just for fun using
xrange()
(Python v2.7.2)I would favor readable code first, then using
xrange()
if available (i.e., Pre-Python v 3.x), followed byrange()
andenumerate()
.I would say that as you aren't using the "_" attribute from the enumarate function then use range as it is more readable that way.
The (x)range solution is faster, because it has less overhead, so I'd use that.
In Python 2.x, use
xrange
instead ofrange
, becausexrange
uses less memory, because it doesn't create a temporary list. In Python 3.x, there is onlyrange
, which is the less-memory version.