I wrote this because I wanted to test it.
So it depends if you need the values to work with.
Code:
testlist = []
for i in range(10000):
testlist.append(i)
def rangelist():
a = 0
for i in range(len(testlist)):
a += i
a = testlist[i] + 1 # Comment this line for example for testing
def enumlist():
b = 0
for i, x in enumerate(testlist):
b += i
b = x + 1 # Comment this line for example for testing
import timeit
t = timeit.Timer(lambda: rangelist())
print("range(len()):")
print(t.timeit(number=10000))
t = timeit.Timer(lambda: enumlist())
print("enum():")
print(t.timeit(number=10000))
Now you can run it and will get most likely the result, that enum() is faster.
When you comment the source at a = testlist[i] + 1
and b = x + 1
you will see range(len()) is faster.
For the code above I get:
range(len()):
18.766527627612255
enum():
15.353173553868345
Now when commenting as stated above I get:
range(len()):
8.231641875551514
enum():
9.974262515773656
enumerate
shouldn't have been used in the 1st place[[profiel.attr[i].x for i,p in enumerate(profiel.attr)] for profiel in prof_obj]
.p
isn't needed or it should be[[p.attr.x for p in profiel.attr] for profiel in prof_obj]
. So I asked myself should rewrite the code one or the other way... - LarsVegas[[p.x for p in profiel.attr] for profiel in prof_obj]
. - Sven Marnachsum_dist = [[sum(afst[:i]) for i,_ in enumerate(afst,start=1)] for afst in dist_betw]
. (Even though I know this construct isn't really needed as I could also useitertools.accumlate()
.) - LarsVegas