Creating a list with holes

Frank Millman frank at chagford.com
Sat Jan 4 02:00:22 EST 2014


"Larry Martell" <larry.martell at gmail.com> wrote in message 
news:CACwCsY5P47-dB1NLQTUTQ=0aF6B+-M3y4hCxcUGmcVmHM8=-xQ at mail.gmail.com...
>I think I know the answer is no, but is there any package that allows
> creating a list with holes in it? E.g. I'd want to do something like:
>
> x[10] = 12
> x[20] = 30
>
> I'm thinking of something like defaultdict but for lists (I know
> that's very different, but ... )
>
> Thanks!
> -larry

Just out of interest, I asked the same question on this list many years ago, 
and someone actually gave me an answer. It was something like the 
following -

>>> class MyList(list):
...     def __getitem__(self, pos):
...         try:
...             return list.__getitem__(self, pos)
...         except IndexError:
...             return None
...     def __setitem__(self, pos, value):
...         try:
...             list.__setitem__(self, pos, value)
...         except IndexError:
...             diff = pos - list.__len__(self)
...             self.extend([None] * diff)
...             self.append(value)
...
>>> ml = MyList()
>>> ml[3]
>>> ml[3] = 'a'
>>> ml
[None, None, None, 'a']
>>>

I wanted it because I was familiar with it from a previous language I had 
used. As is turns out, I never actually used it, but I was impressed!

Frank Millman






More information about the Python-list mailing list