[Tutor] Encoding and Decoding

Kent Johnson kent37 at tds.net
Tue Jan 2 20:31:47 CET 2007


Carlos wrote:
> Hi Kent,
> 
> I have yet to get into OO, and the GA that I'm using was done in this 
> way, so I can't mess with it that much. So for now yes, the list has to 
> be a flat element containing all this info.
> 
> I have been reading about OO lately and a element class seems to be a 
> good idea, I'm working on it now, but I still don't get OO very well. My 
> initial idea is that a loop could iterate over the element list and 
> create objects with the needed parameters and hooks to the list that 
> link to the correct list locations.
> 
> Could you elaborate on the converters and the class that wraps the list???

OK, off the top of my head (not tested) here are some things to get you 
started.

You could write a function that would retrieve a coordinate value given 
an index number, for example:
def getCoord(data, ix):
   base = ix*4
   value = data[ix]*10 + data[ix+1] + data[ix+2]/10.0
   if data[ix+3] < 5:
     value = -value
   return value

Now if data is your big list, you can write getCoord(data, 5) to get the 
value stored at data[20] to data[23]. Similarly you could write a setter 
and maybe a getXY() function that returns a pair (x, y). So that is a 
place to start.

If you want to avoid passing the list around it might make sense to make 
a class to hold it. Then you would have something like
class Data(object):
   def __init__(self, lst):
     self.data = lst

   def getCoord(self, ix):
     base = ix*4
     value = self.data[ix]*10 + self.data[ix+1] + self.data[ix+2]/10.0
     if self.data[ix+3] < 5:
       value = -value
     return value

Now you can create a Data object from a list of values and ask it for 
values:
d = Data(<some list>)
d.getCoord(5)

I'm not sure this is much improvement over passing around the list, 
actually; you still have to pass around the Data object...it might just 
be a matter of taste.

HTH,
Kent

> 
> Thanks
> 
> 
> 
> 
> Kent Johnson wrote:
>> I will assume there is a good reason for storing the coordinates in 
>> this form...
>>
>> Do the numbers have to be all in a single list? I would start by 
>> breaking it up into lists of four, so if you have 10 elements you 
>> would have a list of 20 small lists. It might make sense to pair the x 
>> and y lists so you have a list of 10 lists of 2 lists of 4 numbers, e.g.
>> [ [ [6, 1, 2, 3], [7, 2, 8, 4] ], ...]
>>
>> Another thing to consider is whether you might want to make a class to 
>> hold the coordinate values, then you could refer to x.tens, x.units, 
>> x.decimal, x.sign by name.
>>
>> If you need a single list for the GA to work, one alternative would be 
>> to make converters between the nested representation and the flat one. 
>> Alternately you could wrap the list in a class which provides helpful 
>> accessors.
>>
>> HTH
>> Kent
>>
>>
> 
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
> 
> 




More information about the Tutor mailing list