Using simple for
is faster than list comprehesion
. It is almost 2 times faster. Check below results:
Using list comprehension
: 58 usec
moin@moin-pc:~$ python -m timeit "[i for i in range(1000)]"
10000 loops, best of 3: 58 usec per loop
Using for
loop: 37.1 usec
moin@moin-pc:~$ python -m timeit "for i in range(1000): i"
10000 loops, best of 3: 37.1 usec per loop
But in your case, for
is taking more time than list comprehension not because YOUR for loop is slow. But because of .append()
you are using within the code.
With append()
in for
loop`: 114 usec
moin@moin-pc:~$ python -m timeit "my_list = []" "for i in range(1000): my_list.append(i)"
10000 loops, best of 3: 114 usec per loop
Which clearly shows that it is .append()
which is taking twice the time taken by for
loop.
However, on storing the "list.append" in different variable
: 69.3 usec
moin@moin-pc:~$ python -m timeit "my_list = []; append = my_list.append" "for i in range(1000): append(i)"
10000 loops, best of 3: 69.3 usec per loop
There is a huge improvement in the performance as compared to the last case in above comparisons, and result is quite comparable to that of list comprehension
. That means, instead of calling my_list.append()
each time, the performance can be improved by storing the reference of function in another variable i.e append_func = my_list.append
and making a call using that variable append_func(i)
.
Which also proves, it is faster to call class's function stored in the variable as compared to directly making the function call using object of the class.
Thank You Stefan for bringing the last case in notice.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…