Equivalent string.find method for a list of strings

jeremit0 jeremit0 at gmail.com
Fri Apr 8 22:48:22 EDT 2005


Steven Bethard wrote:
> jeremit0 wrote:
> 
>> Steve Holden wrote:
>>
>>> If you want line numbers,. of course, then you can use
>>>
>>>   for linenum, line in enumerate(myfile.readlines()):
>>>       ...
>>>
>>> Remember that true to Python's philosophy numbering will start at zero.
>>>
>> Is this any better than:
>>
>>     lines = myfile.readlines()
>>     for linenum in xrange(len(lines)):
>>         # Do stuff with lines[linenum] ...
> 
> 
> Well, if you use lines[linenum] often in that code, it'll be more 
> efficient to use enumerate (or bind lines[linenum] to a name, which is 
> basically what enumerate is doing for you).  Given the file test.py:
> 
> --------------------------------------------------
> def elines(lines):
>     for linenum, line in enumerate(lines):
>         x = linenum
>         y = line
>         z = line
> 
> def xlines(lines):
>     for linenum in xrange(len(lines)):
>         x = linenum
>         y = lines[linenum]
>         z = lines[linenum]
> 
> --------------------------------------------------
> 
> Here's what I get with timeit:
> 
> [D:\Steve]$ python -m timeit -s"lines = range(10000); import test" 
> "test.elines(lines)"
> 100 loops, best of 3: 2.85 msec per loop
> 
> [D:\Steve]$ python -m timeit -s"lines = range(10000); import test" 
> "test.xlines(lines)"
> 100 loops, best of 3: 3.18 msec per loop
> 
> The other thing worth noting is that enumerate will work with any 
> iterable, while your xrange technique won't.  Try:
>     for linenum, line in enumerate(myfile):
>         ...
> and
>     for linenum in xrange(len(myfile)):
>         line = myfile[linenum]
>         ...
> and see what kind of cool errors you get with the xrange solution. :)
> 
> STeVe

Wow that is significant evidence.  Thanks for doing that.

This is the first time I have posted to this list.  I really like it for 
two reasons.  1) There are lots of people who are willing to help out 
and 2) there are so many ideas now I can pick which one I like best.  I 
think I am leaning towards using enumerate.

Thanks,
Jeremy




More information about the Python-list mailing list