Why I think range is a wart.
Peter Dobcsanyi
dpeter at designtheory.org
Thu Mar 14 13:39:23 EST 2002
Fredrik Lundh <fredrik at pythonware.com> wrote:
>
> note that
>
> index = 0
> for item in mylist:
> <whatever>
> index += 1
>
> is faster than
>
> for index in range(len(mylist)):
> item = mylist[index]
> <whatever>
>
Here is some timing with variations posted so far.
i in range(len(ls)): 2.01
x in ls; i+=1 : 2.59
lambda x:zip(range(len(x)), x): 3.86
Iter class: 10.7
I used python 2.2, and ran each functions 3000 times.
Code is attached.
--------------------------------------------------< code >-------------
import time
import sys
def foo(ls):
for i in range(len(ls)):
if ls[i] == '998':
return i
def bar(ls):
i = 0
for x in ls:
if ls[i] == '998':
return i
i += 1
literator = lambda x:zip(range(len(x)), x)
def fzip(ls):
for x,y in literator(ls):
if y == '998':
return x
class Iter:
def __init__(self, list):
self.list = list
def __getitem__(self, index):
return(index, self.list[index])
def iter(ls):
for x,y in Iter(ls):
if y == '998':
return x
def timing(f, x, n):
a = time.clock()
for i in range(n):
f(x)
b = time.clock()
print b - a
ls = []
for i in range(1000):
ls.append(str(i))
n = int(sys.argv[1])
print 'i in range(len(ls)):',
timing(foo, ls, n)
print 'x in ls; i+=1 :',
timing(bar, ls, n)
print'lambda x:zip(range(len(x)), x):',
timing(fzip, ls, n)
print 'Iter class:',
timing(iter, ls, n)
--------------------------------------------------< end of code >-------------
More information about the Python-list
mailing list