Is there a more elegant way to do this?

Mike Fletcher mfletch at tpresence.com
Wed Sep 13 14:49:09 EDT 2000


Untested, but should give you an idea...

def runningReport( self ):
	set = map( None, self.counters, range(len(self.counters)))
	set.sort() # sort by counters, then by index
	return map( lambda x: x[1], set[-5:] ) # return just indicies

HTH,
Mike	

-----Original Message-----
From: Larry Whitley [mailto:ldw at us.ibm.com]
Sent: Wednesday, September 13, 2000 2:23 PM
To: python-list at python.org
Subject: Is there a more elegant way to do this?


Here's the problem:

I have a list of counters that will have a wide variety of different values
in them.  At intervals while the program runs, I will print out the indexes
of the counters with the five largest counts.  The counters are in a list
identified below as self.counters.  Here's my inelegant way of doing it.

def runningReport(self): # a method of a larger class
    temp = [] # to make sure that temp is not just another reference to
self.counters
    temp = temp + self.counters # there are 100 individual counts in
self.counters
    temp.sort()
    temp.reverse() # now largest value is first
    temp2 = [] # for the result
    for i in range( 5 ):
        temp2.append( self.counters.index( temp[i] ) # find the index of the
next (largest) counter and store it in temp2
    print temp2

Surely there is a better way....

Larry


-- 
http://www.python.org/mailman/listinfo/python-list




More information about the Python-list mailing list