Fetching multiple items from a list

Alex Martelli aleaxit at yahoo.com
Tue Jul 3 17:30:11 CEST 2001


"Joonas Paalasmaa" <joonas.paalasmaa at nokia.com> wrote in message
news:3B41B778.6BD422C1 at nokia.com...
> Why doesn't Python support fetching and setting multiple items
> at the same time for lists and tuples.

I don't know.  Too APL'ish?-)


> For example in the example below multiple fetching would be
> much better way than the ordinary way.
>
> >>> import string
> >>> mylist = list(string.lowercase)
> >>> mylist[18],mylist[15],mylist[0],mylist[12]
> ('s', 'p', 'a', 'm')
> >>> mylist[18,15,0,12]
> Traceback (most recent call last):
>   File "<pyshell#23>", line 1, in ?
>     mylist[18,15,0,12]
> TypeError: sequence index must be integer
> >>>

The ordinary way of course is
    [mylist[i] for i in 18,15,0,12]
so it's not THAT bad, albeit SLIGHTLY more verbose
than mylist[18,15,0,12] as you would like.  But there
is no "set-multiple" equivalent to the way the list
comprehension provides a reasonably-handy get-multiple;
it does have to be a for-statement:
    for i, v in zip((18,15,0,12),'blah')):
        mylist[i] = v
or an auxiliary function:
def setitems(cnt, idx, val):
    for i, v in zip(idx, val):
        cnt[i] = v
to be called as: setitems(mylist, (18,15,0,12), 'blah').


Alex






More information about the Python-list mailing list