Efficiently iterating over part of a list
James Stroud
jstroud at mbi.ucla.edu
Fri Oct 13 03:52:14 EDT 2006
James Stroud wrote:
> Steven D'Aprano wrote:
>> If I want to iterate over part of the list, the normal Python idiom is to
>> do something like this:
>>
>> alist = range(50)
>> # first item is special
>> x = alist[0]
>> # iterate over the rest of the list
>> for item in alist[1:]
>> x = item
>>
>> The important thing to notice is that alist[1:] makes a copy. What if the
>> list has millions of items and duplicating it is expensive? What do
>> people
>> do in that case?
>>
>> Are there better or more Pythonic alternatives to this obvious C-like
>> idiom?
>>
>> for i in range(1, len(alist)):
>> x = alist[i]
>>
>>
>
> I think this is a job for iterators:
>
> listiter = iter(alist)
>
> first_item_is_special = listiter.next()
>
> for not_special_item in listiter:
> do_stuff_with(not_special_item)
>
>
> Other solutions might involve enumerators:
>
> special = [i for i in xrange(50) if not i%13]
>
> for i,item in alist:
> if i in special:
> do_something_special_with(item)
> else:
> do_other_stuff_with(item)
>
> James
>
>
> James
I mean
for i,item in enumerate(alist):
More information about the Python-list
mailing list