On Apr 29, 11:46 am, Michael Hoffman <[EMAIL PROTECTED]> wrote: > GHUM wrote: > > Steven, > > >> def index(sequence): > >> decorated = zip(sequence, xrange(len(sequence))) > >> decorated.sort() > >> return [idx for (value, idx) in decorated] > > > would'nt that be equivalent code? > > > def index(sequence): > > return [c for _,c in sorted((b,a) for a, b in > > enumerate(sequence))] > > Or even these: > > def index(sequence): > return sorted(range(len(sequence)), key=sequence.__getitem__) > > def rank(sequence): > return sorted(range(len(sequence)), > key=index(sequence).__getitem__)
Better still: def rank(sequence): return index(index(sequence)) :) But really these two versions of rank are slower than the original one (as sorting a list is O(nlogn) whereas filling a table with precomputed values is O(n) ). Anyway I would like to contribute my own index function: def index(seq): return sum(sorted(map(list,enumerate(seq)), key=list.pop), []) It's short and has the advantage of being self-documenting, which will save Steven a lot of annoying typing I hope ;) Who said Python couldn't rival with perl? -- Arnaud -- http://mail.python.org/mailman/listinfo/python-list