Explicitly select items from a list or tuple
list( myBigList[i] for i in [87, 342, 217, 998, 500] )
I compared the answers with python 2.5.2:
19.7 usec:
[ myBigList[i] for i in [87, 342, 217, 998, 500] ]
20.6 usec:
map(myBigList.__getitem__, (87, 342, 217, 998, 500))
22.7 usec:
itemgetter(87, 342, 217, 998, 500)(myBigList)
24.6 usec:
list( myBigList[i] for i in [87, 342, 217, 998, 500] )
Note that in Python 3, the 1st was changed to be the same as the 4th.
Another option would be to start out with a numpy.array
which allows indexing via a list or a numpy.array
:
>>> import numpy>>> myBigList = numpy.array(range(1000))>>> myBigList[(87, 342, 217, 998, 500)]Traceback (most recent call last): File "<stdin>", line 1, in <module>IndexError: invalid index>>> myBigList[[87, 342, 217, 998, 500]]array([ 87, 342, 217, 998, 500])>>> myBigList[numpy.array([87, 342, 217, 998, 500])]array([ 87, 342, 217, 998, 500])
The tuple
doesn't work the same way as those are slices.
It isn't built-in, but you can make a subclass of list that takes tuples as "indexes" if you'd like:
class MyList(list): def __getitem__(self, index): if isinstance(index, tuple): return [self[i] for i in index] return super(MyList, self).__getitem__(index)seq = MyList("foo bar baaz quux mumble".split())print seq[0]print seq[2,4]print seq[1::2]
printing
foo['baaz', 'mumble']['bar', 'quux']