sorting many arrays from one...

Shagshag13 shagshag13 at yahoo.fr
Tue Jul 9 09:14:33 EDT 2002


"Alex Martelli" <aleax at aleax.it> a écrit dans le message de news: nYAW8.59639$vm5.2174555 at news2.tin.it...

> aux_list = zip(drive, other1, other2, other3)
> aux_list.sort()
>
> for i in range(len(drive)):
>     drive[i], other1[i], other2[i], other3[i] = aux_list[i]
>

thanks ! it's quite impressive and even works with array (i didn't even knew this "zip" built-in function nor thought that sorting
was possible on tuples). I think that if you don't use "map" to replace the "for loop", it's because it's impossible, so i don't
need to try ;o)

i have another question, i need a way to have a one to one mapping from string to integer to save storage : in fact having an id key
associated with strings (like in a database). By now i use the code below (which was inspired by seqDict package). But you told me
that to save memory and time i should better use 2 dicts, did i understood well ? or is is a better "efficient" way ?

and again great thanks for all your advices / replies...

s13.

----

def test_Keys():
 k = Keys()
 t = ('Un', 'Deux', 'Trois', 'Quatre', 'Cinq', 'Six')
 for i in range(len(t)):
  k.add(t[i])
 print "longueur = [%s]" % len(k)
 print "element 2 = [%s]" % k[2]
 print "position de [%s] = [%s]" % (t[2], k.index(t[2]))

class Keys:
 def __init__(self):
  self._size = 0
  self._elements = {}  # dictionary element -> int key - ex: {a : 0, b : 2, c : 1}
  self._seqKeys = []  # list containing elements, int key -> element - ex: [a, c, b]

 def __str__(self):
  # Missing code to check for empty !!!
  s = 'Keys (' + "\n"
  s += str(self._elements) + "\n"
  s += str(self._seqKeys) + "\n"
  s += str(self._size) + ' # size' + "\n"
  s += ')' + "\n"
  return s

 def __len__(self):
  return self._size

 def __getitem__(self, pos):
  return self._seqKeys[pos]

 def reset(self):
  del self._size
  del self._elements
  del self._seqKeys
  self._size = 0
  self._elements = {}  # element -> int key - ex: {a : 0, b : 2, c : 1}
  self._seqKeys = [] # contains elements, int key -> element - ex: [a, c, b]

 def get_item(self, pos):
  return self._seqKeys[pos]

 def index(self, element):
  return self._elements[element]

 def get(self, key):
  if type(key) == types.IntType:
   return key
  elif type(key) == types.StringType:
   return self._elements[key]

 def keys(self):
  return self._seqKeys

 def get_size(self):
  return self._size

 def add(self, element):
  if self._elements.has_key(element):
   return self._elements[element]
  self._seqKeys.append(element)
  self._elements[element] = self._size
  self._size += 1
  return (self._size - 1)







More information about the Python-list mailing list