Iterate from 2nd element of a huge list

Steven D'Aprano steve+comp.lang.python at pearwood.info
Wed Feb 1 03:43:38 CET 2012


On Wed, 01 Feb 2012 01:39:38 +0000, Paulo da Silva wrote:

> Hi!
> 
> What is the best way to iterate thru a huge list having the 1st element
> a different process? I.e.:
> 
> process1(mylist[0])
> for el in mylist[1:]:
> 	process2(el)
> 
> This way mylist is almost duplicated, isn't it?

Yes. But don't be too concerned: what you consider a huge list and what 
Python considers a huge list are unlikely to be the same. In my 
experience, many people consider 10,000 items to be huge, but that's only 
about 45K of memory. Copying it will be fast. On my laptop:

steve at runes:~$ python -m timeit -s "L = range(10000)" "L2 = L[1:]"
10000 loops, best of 3: 57.1 usec per loop

But if you have tens of millions of items, or think that you might 
someday have to deal with tens of millions of items, here's an easy 
technique to use:

it = iter(mylist)
process1(next(it))  # In Python 2.5, use it.next() instead.
for el in it:
    process2(el)


No copying is performed.

For tiny lists, the iterator overhead will mean this is a smidgen slower, 
but for tiny lists, who cares if it takes 2 nanoseconds instead of 1?


-- 
Steven



More information about the Python-list mailing list