Python Forum
How to find the second lowest element in the list? - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: How to find the second lowest element in the list? (/thread-37358.html)



How to find the second lowest element in the list? - Anonymous - May-31-2022

I have a list of students and I have to print the names of students who have scored second lowest.

students = [['Harry', 37.21], ['Berry', 37.21], ['Tina', 37.2], ['Akriti', 41], ['Harsh', 39]]

The lowest grade of belongs to Tina. The second lowest grade of belongs to both Harry and Berry, so we order their names alphabetically and print each name on a new line.

I am extremely new to python so I have coded as below -

 studList = []
for i in range(int(input())):
  name = input()
  score = float(input())
  studList.append([name,score])
  
studList = sorted(studList, key = lambda x: x[1], reverse = True)

print(studList)  
I have done till the point that I now have a sorted list but now I am not sure I do I extract the second lowest scorer's names.


RE: How to find the second lowest element in the list? - DeaD_EyE - May-31-2022

  • use operator.itemgetter or lambda for the key function
  • sort your list reversed (big numbers first) with the key function
  • use the index -2 to access the second-smallest element


from operator import itemgetter

values = [('A', 4), ('B', 3), ('C', 1), ('D', 6), ('E', 1), ('F', -10), ('G', -20)]
# the second smallest number is -10

name_getter = itemgetter(0)
value_getter = itemgetter(1)

# itemgetter is useful as a key function for sorting
# this prevents the use of lambda
sorted_values = sorted(values, reverse=True, key=value_getter)

# btw, If you had chosen (value, name), then the key function is not required.
# 


 # get both, name and value
result = sorted_values[-2]
print(result)

# name_getter return index 0 from result
print(name_getter(result))
# or
print(result[0])



RE: How to find the second lowest element in the list? - Coricoco_fr - May-31-2022

Hello,
>>> students = [['Harry', 37.21], ['Berry', 37.21], ['Tina', 37.2], ['Akriti', 41], ['Harsh', 39]]
>>> studList = [student[0] for student in sorted(students, key = lambda x: x[1], reverse = True)]
>>> print(studList)
['Akriti', 'Harsh', 'Harry', 'Berry', 'Tina']
>>>
édit: sorry Confused


RE: How to find the second lowest element in the list? - Larz60+ - May-31-2022

students = [['Harry', 37.21], ['Berry', 37.21], ['Tina', 37.2], ['Akriti', 41], ['Harsh', 39]]

sorted_students = sorted(students, key=lambda x:x[1], reverse=True)

print(f"Second lowest = {sorted_students[-2]}", end = '')
if sorted_students[-3][1] == sorted_students[-2][1]:
    print(f" and {sorted_students[-3]}")
else:
    print()
results:
Output:
Second lowest = ['Berry', 37.21] and ['Harry', 37.21]