Ken G. wrote: > I have been keeping track of numbers drawn in our local lotto drawings > into a list format as shown in a short example below. Using such list, I > am able to determine how often a number appears within the last 100 plus > drawings. > > The length of my lists range from 5, 15, 35, 59and 75 long. I will give > an example of one of my short list. > > PowerPlay = [0, 0, 61, 32, 11, 14] > > Disregarding index 0 and 1, I can see and print the following: > > Index Number > 2 61 > 3 32 > 4 11 > 5 14 > > showing that number 2 appears 61 times, number 3 appears 32 times, > number 4 appears 11 times and number 5 appears 14 times within last 100 > plus drawings. > > How I best rearrange the numbers from high to low with its corresponding > index number such as below: > > Number Index > 61 2 > 32 3 > 14 5 > 11 4 > > showing the number 2 appears 61 times, number 3 appears 32 times, number > 5 appears 14 times and number 4 appears 11 times. I know that using > > MegaBall.reverse() > > sort the number from high to low but the index numbers still remain in > the same positions. > > Thanks for pointing out the way to do this.
The initial list: >>> power_play = [0, 0, 61, 32, 11, 14] Use enumerate() to get index, frequency pairs: >>> list(enumerate(power_play)) [(0, 0), (1, 0), (2, 61), (3, 32), (4, 11), (5, 14)] Sort the pairs: >>> sorted(enumerate(power_play)) [(0, 0), (1, 0), (2, 61), (3, 32), (4, 11), (5, 14)] Provide a key to sort after the second value, i. e. the frequency in the (index, frequency) pairs: >>> def second_value(item): ... return item[1] ... >>> sorted(enumerate(power_play), key=second_value) [(0, 0), (1, 0), (4, 11), (5, 14), (3, 32), (2, 61)] Note that instead of writing your own custom function or lambda you could also use operator.itemgetter(1) from the operator module in the stdlib. Sort in reverse order: >>> sorted(enumerate(power_play), key=second_value, reverse=True) [(2, 61), (3, 32), (5, 14), (4, 11), (0, 0), (1, 0)] Print the output for frequencies > 0: >>> pairs = sorted(enumerate(power_play), key=second_value, reverse=True) >>> for index, freq in pairs: ... if freq == 0: ... break ... print(freq, index, sep="\t") ... 61 2 32 3 14 5 11 4 _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor