Which is fastest dict or list.index() ?
James T. Dennis
jadestar at idiom.com
Mon Jun 17 04:29:30 EDT 2002
Shagshag13 <shagshag13 at yahoo.fr> wrote:
> Thanks !!! (i use some tricks i find in seqdict)
>> If you want a skiplist version, let me know and I'll send it.
>> Raymond Hettinger
> I'm sorry, but i don't understand what you mean by a "skiplist version"
> So here is how i do it now, i think i miss to explain that i must keep some
> kind of id (which i use as a key in another table, and i want to keep
> this other table indexed by integer instead of words to save mermory).
> <- thoug i don't know if this is a real saving...
I'd probably use a simple list of tuples in a class. The class
would be responsible for maintaining the sorted order of the list
via the "bisect" module's insort function and it would provide
a short binary search function to find and return any element
of the list.
Actually almost any technique is likely to be overkill for this
particular problem domain. There are max. a few thousand toons
and any modern computer could could simply brute force them using
x=dictionaries.items(); x.sort().
> i'm huge newbie but i feel python really pleasant, great, etc... (even if i
> had lots of trouble
> with memory run out... on a solaris system with 1024mo...)
> i post for comments or advices as i'm not a skilled pythoner...
> thanks in advance for reading and helping
> class IKeys:
> def __init__(self):
> self._size = 0
> self._term = {} # element -> int key - ex: {a : 0, b : 2, c : 1}
> self._iKeys = [] # contains elements, int key -> element - ex: [a, c, b]
> def __str__(self):
> s = 'iKey (' + "\n"
> s += str(self._term) + "\n"
> s += str(self._iKeys) + "\n"
> s += str(self._size) + " # size)\n"
> return s
> def __len__(self):
> return self._size
> def __getitem__(self, pos):
> return self._iKeys[pos]
> def index(self, element):
> return self._term[element]
> def add(self, element):
> if self._term.has_key(element):
> return self._term[element]
> self._iKeys.append(element)
> self._term[element] = self._size
> self._size += 1
> return (self._size - 1)
> def keys(self):
> return self._iKeys
> def get_size(self):
> return self._size
> which i use like this :
>>>> toons = IKeys()
>>>> for t in ['Bugs', 'Mickey', 'Babs', 'Jerry', 'Tom', 'Babs']:
> toons.add(t)
> 0
> 1
> 2
> 3
> 4
> 2 # already in toons so we don't had it, we get id
>>>> print toons
> iKey (
> {'Mickey': 1, 'Babs': 2, 'Tom': 4, 'Bugs': 0, 'Jerry': 3}
> ['Babs', 'Bugs', 'Jerry', 'Mickey', 'Tom']
> 5 # size)
>>>> t[2]
> 'b'
>>>> toons[2]
> 'Babs'
>>>> toons.index('Jerry')
> 3
>>>> tmp = toons.keys()
>>>> tmp.sort()
>>>> for t in tmp: # here it's sorted
> i = toons.index(t)
> print "Toons [%s] has id [%s]" % (t, i)
> Toons [Babs] has id [2]
> Toons [Bugs] has id [0]
> Toons [Jerry] has id [3]
> Toons [Mickey] has id [1]
> Toons [Tom] has id [4]
More information about the Python-list
mailing list