Jumping around when assigning elements

Cameron Laird claird at lairds.com
Tue Dec 16 01:35:02 CET 2003


In article <brljag$ihk$01$1 at news.t-online.com>,
Peter Otten  <__peter__ at web.de> wrote:
>Matthew Sims wrote:
>
>> Is there anyway to assign to an element that wasn't defined in the
>> beginning? Like if I wanted element 5 assigned but not element 4
>> without using "" or None?
>
>You can write your own class:
>
>class GrowingList(list):
>    def __init__(self, seq, default=None):
>        list.__init__(self, seq)
>        self.default = default
>    def __setitem__(self, index, value):
>        if index >= len(self):
>            self.extend([self.default]*(index - len(self)))
>            self.append(value)
>        else:
>            list.__setitem__(self, index, value)
>
>
>g = GrowingList(["alpha", "beta", "gamma"])
>g[7] = "omega"
>print g
>
>This is a partial implementation, only g[index] = value will work.
>
>> I'm currently re-writing a Perl script into Python and with Perl I was
>> free to assign any element in the array without having to fill in the
>> previous elements. I can't seem to do that in Python...unless I'm
>> doing it wrong.
>
>As already pointed out, a mechanical translation will yield substandard
>results. As you did not describe the problem you are solving with the
>"autogrowing" list, there is little chance for us to come up with a better
>or at least more idiomatic approach.
			.
			.
			.
We've probably convinced Mr. Sims that Python (and
object-oriented programming) is really, really hard,
particularly compared to Perl:  we have to write
hairy Class definitions just to do the simplest
things.

I think there's a fair probability this is all a
misunderstanding, and that what Mr. Sims truly wants,
although he doesn't realize it, is simply a dictionary, 
rather than a list.  Mr. Sims, how would you feel if I
said you should be using a Perl "hash" rather than an
"array"?
-- 

Cameron Laird <claird at phaseit.net>
Business:  http://www.Phaseit.net




More information about the Python-list mailing list