Python Forum
How to find the second lowest element in the list?
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
How to find the second lowest element in the list?
#1
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.
Reply
#2
  • 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])
Almost dead, but too lazy to die: https://sourceserver.info
All humans together. We don't need politicians!
Reply
#3
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
I speak Python but I don't speak English (I just read it a little). If I express myself badly, please blame the translator^^.
Reply
#4
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]
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  list in dicitonary element problem jacksfrustration 3 626 Oct-14-2023, 03:37 PM
Last Post: deanhystad
  Program to find Mode of a list PythonBoy 6 1,000 Sep-12-2023, 09:31 AM
Last Post: PythonBoy
  find random numbers that are = to the first 2 number of a list. Frankduc 23 3,049 Apr-05-2023, 07:36 PM
Last Post: Frankduc
  compare and find the nearest element ? mr_gentle_sausage 4 1,003 Jan-15-2023, 07:11 AM
Last Post: DPaul
  Find (each) element from a list in a file tester_V 3 1,157 Nov-15-2022, 08:40 PM
Last Post: tester_V
  Сheck if an element from a list is in another list that contains a namedtuple elnk 8 1,738 Oct-26-2022, 04:03 PM
Last Post: deanhystad
  [SOLVED] [Beautifulsoup] Find if element exists, and edit/append? Winfried 2 4,134 Sep-03-2022, 10:14 PM
Last Post: Winfried
  read a text file, find all integers, append to list oldtrafford 12 3,373 Aug-11-2022, 08:23 AM
Last Post: Pedroski55
  Membership test for an element in a list that is a dict value for a particular key? Mark17 2 1,162 Jul-01-2022, 10:52 PM
Last Post: Pedroski55
  find some word in text list file and a bit change to them RolanRoll 3 1,482 Jun-27-2022, 01:36 AM
Last Post: RolanRoll

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020