so i have these 2 lists:
score = [350, 914, 569, 223, 947, 284, 567, 333, 697, 245, 227, 785, 120, 794, 343, 773, 293, 995] name = [Ryan, Stacy, Jenna, Peter, Sophie, Bryan, Cole, Andrea, Emily, Blake, Mike, Stephan, Rob, Eliza, Heather, Daniel, Elisabeth, Samantha]
I have to find the 3 highest scores and tally these scores with their respective scorers in the name list, so that I can have new lists
top3score = [947, 995, 914] top3name = [Sophie, Samantha, Stacy]
I’m thinking of indexing the highest scores, appending them into a list than using the index to tally these scores with the names.
my question is how do i index the 3 highest values in the list? and then, how do i use the index to look for the scorers name in the name list so that i can append them in the top3name list?
Advertisement
Answer
I think this will do it
sorted(zip(score, name), reverse=True)[:3]
So you understand what is going on:
zip: takes iterables as it’s arguments and takes one element from each iterable, placing them in a tuple.
So:
>>> zip(score, name) [(350, 'Ryan'), (914, 'Stacy'), (569, 'Jenna'), (223, 'Peter'), (947, 'Sophie'), (284, 'Bryan'), (567, 'Cole'), (333, 'Andrea'), (697, 'Emily'), (245, 'Blake'), (227, 'Mike'), (785, 'Stephan'), (120, 'Rob'), (794, 'Eliza'), (343, 'Heather'), (773, 'Daniel'), (293, 'Elisabeth'), (995, 'Samantha')]
sorted: will sort the data. By default, a tuple element is sorted on the element in the 0 index, so the score in this case. Reverse=True will sort it descending first.
And lastly, the [:3]
is slice notation, saying give me all elements from the beginning up to the 3rd element. This could have also been written as [0:3]