Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Get the index of the 5 biggest values in a list

Currently working on a list, and I have to try to get the 5 largest numbers and their indexes. But for some reason, when I run what I thought would give me the 5 largest numbers and their indexes it is not saving the information as I expected it. Here is my code:

# Given list
list = [13, 11, 12, 11, 8, 8, 10, 8, 9, 12, 10, 10, 11, 13, 9, 8, 8, 8, 9, 11, 6, 3, 6, 7, 3, 11, 9, 10, 2, 9, 4, 11]

# Created a temporary list so that I can modify it as I please and a new list to store the index of the largest numbers
templist = list
largest = []

# For loop to iterate 5 times
for x in range(5):
  index = templist.index(max(templist))
  largest.append(index)
  templist.pop(index)
  templist.insert(index, 0)
  # Added the last to lines to remove the largest number taken and replace it with a 0 so once it iterates again it does not get the same number

print(largest)
print(templist)
print(list)
# At this point, when printing the original list, it seems like the data stored on the templist is being written on the original list since when I print this it is giving me the output:
# [0, 13, 2, 9, 1]
# [0, 0, 0, 11, 8, 8, 10, 8, 9, 0, 10, 10, 11, 0, 9, 8, 8, 8, 9, 11, 6, 3, 6, 7, 3, 11, 9, 10, 2, 9, 4, 11]
# [0, 0, 0, 11, 8, 8, 10, 8, 9, 0, 10, 10, 11, 0, 9, 8, 8, 8, 9, 11, 6, 3, 6, 7, 3, 11, 9, 10, 2, 9, 4, 11]

Any idea why it is rewriting the original list aswell?

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

Here’s a modified version of your code that will give you something closer to what you expected, with explanations in line of the changes I’ve made.

# First off, "list" is a special name in Python and represents the "type" list. 
# Therefore it's best not to use "list" as a variable name. Suggest "list1" instead:
list1 = [13, 11, 12, 11, 8, 8, 10, 8, 9, 12, 10, 10, 11, 13, 9, 8, 8, 8, 9, 11, 6, 3, 6, 7, 3, 11, 9, 10, 2, 9, 4, 11]


# If you wish to make a copy of something to manipulate while retaining the original,
# it's best to use copy(), as below. 
# If you simply say "templist = list1", you're essentially creating two different
# names by which to refer to the same object - mutating one will mutate the other. 
templist = list1.copy()
largest = []

# For loop to iterate 5 times
for x in range(5):
  index = templist.index(max(templist))
  largest.append(index)
  
  # Instead of these two lines...
  
  # templist.pop(index)
  # templist.insert(index, 0)
  
  # you can just do this.
  templist[index] = 0
  
  

print(largest)
print(templist)

for i in largest:
    print (i, list1[i])
    
# Result: 
    # 0 13
    # 13 13
    # 2 12
    # 9 12
    # 1 11
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading