Python - Find minimum k records from tuple list
Last Updated :
06 Apr, 2023
Sometimes, while working with data, we can have a problem in which we have records and we require to find the lowest K scores from it. This kind of application is popular in web development domain. Let’s discuss certain ways in which this problem can be solved.
Method #1 : Using sorted() + lambda The combination of above functionality can be used to perform this particular task. In this, we just employ sorted function, and print the lowest K elements using list slicing.
Python3
# Python3 code to demonstrate working of
# Minimum K records
# Using sorted() + lambda
# Initializing list
test_list = [('Manjeet', 10), ('Akshat', 4), ('Akash', 2), ('Nikhil', 8)]
# Initializing K
K = 2
# printing original list
print("The original list is : " + str(test_list))
# Minimum K records
# Using sorted() + lambda
res = sorted(test_list, key = lambda x: x[1])[:K]
# printing result
print("The lowest K records are : " + str(res))
OutputThe original list is : [('Manjeet', 10), ('Akshat', 4), ('Akash', 2), ('Nikhil', 8)]
The lowest K records are : [('Akash', 2), ('Akshat', 4)]
Time complexity: O(n log n), where n is the length of the input list.
Auxiliary space: O(1). The space used by the algorithm is constant because the input list and K are the only variables that are being stored, and the result list is being constructed in place.
Method #2 : Using sorted() + itemgetter() The combination of above functions can also be used to perform this particular task. In this, the task performed by lambda function is performed by itemgetter() is used to get the index in tuple which has to be included in calculations.
Python3
# Python3 code to demonstrate working of
# Minimum K records
# Using sorted() + itemgetter()
from operator import itemgetter
# Initializing list
test_list = [('Manjeet', 10), ('Akshat', 4), ('Akash', 2), ('Nikhil', 8)]
# Initializing K
K = 2
# printing original list
print("The original list is : " + str(test_list))
# Minimum K records
# Using sorted() + itemgetter()
res = sorted(test_list, key = itemgetter(1))[:K]
# printing result
print("The lowest K records are : " + str(res))
OutputThe original list is : [('Manjeet', 10), ('Akshat', 4), ('Akash', 2), ('Nikhil', 8)]
The lowest K records are : [('Akash', 2), ('Akshat', 4)]
Time complexity: O(n log n), where n is the length of the test_list.
Auxiliary space: O(k), where k is the value of K, since we are creating a new list of length K to store the minimum K records.
Method #3 : Using heapq.nsmallest()
This method uses the nsmallest() function from the heapq module which returns the k smallest elements from an iterable. This method is more efficient than sorting the entire list and slicing the first k elements as it only considers the k smallest elements and doesn't sort the entire list.
Python3
# Python3 code to demonstrate working of
# Minimum K records
# Using heapq.nsmallest()
import heapq
# Initializing list
test_list = [('Manjeet', 10), ('Akshat', 4), ('Akash', 2), ('Nikhil', 8)]
# Initializing K
K = 2
# printing original list
print("The original list is : " + str(test_list))
# Minimum K records
# Using heapq.nsmallest()
res = heapq.nsmallest(K, test_list, key = lambda x: x[1])
# printing result
print("The lowest K records are : " + str(res))
#This code is contributed by Edula Vinay Kumar Reddy
OutputThe original list is : [('Manjeet', 10), ('Akshat', 4), ('Akash', 2), ('Nikhil', 8)]
The lowest K records are : [('Akash', 2), ('Akshat', 4)]
Time complexity of using heapq.nsmallest() is O(nlogk) and the Auxiliary space is O(k).
Method #4 : Using a for loop and conditional statements
This approach uses two nested for loops to find the minimum value in the list, and removes it from the list after it has been added to the result list. The outer for loop runs K times to find K minimum values. This approach may not be as efficient as the other methods for large lists.
Python3
# Python3 code to demonstrate working of
# Minimum K records
# Using a for loop and conditional statements
# Initializing list
test_list = [('Manjeet', 10), ('Akshat', 4), ('Akash', 2), ('Nikhil', 8)]
# Initializing K
K = 2
# printing original list
print("The original list is : " + str(test_list))
# Minimum K records
res = []
for i in range(K):
min_val = test_list[0]
for val in test_list:
if val[1] < min_val[1]:
min_val = val
res.append(min_val)
test_list.remove(min_val)
# printing result
print("The lowest K records are : " + str(res))
OutputThe original list is : [('Manjeet', 10), ('Akshat', 4), ('Akash', 2), ('Nikhil', 8)]
The lowest K records are : [('Akash', 2), ('Akshat', 4)]
The time complexity of the given code is O(K*N^2), where N is the length of the input list.
The space complexity is O(K), as we are storing the minimum K values in the res list.
Method #5: Using heapq.nlargest()
This method can be used to find the largest K elements in the list. We can negate the second element in the tuple and use heapq.nlargest() to find the K largest tuples. Finally, we can negate the second element back to obtain the K smallest tuples.
step-by-step approach:
- Negate the second element in each tuple using a lambda function.
- Use heapq.nlargest() to find the K largest tuples.
- Negate the second element in each tuple back to obtain the K smallest tuples.
Python3
import heapq
# Initializing list
test_list = [('Manjeet', 10), ('Akshat', 4), ('Akash', 2), ('Nikhil', 8)]
# Initializing K
K = 2
# printing original list
print("The original list is : " + str(test_list))
# Minimum K records using heapq.nlargest()
res = heapq.nlargest(K, test_list, key=lambda x: -x[1])
res = [(name, -score) for name, score in res]
# printing result
print("The lowest K records are : " + str(res))
OutputThe original list is : [('Manjeet', 10), ('Akshat', 4), ('Akash', 2), ('Nikhil', 8)]
The lowest K records are : [('Akash', -2), ('Akshat', -4)]
Time complexity: O(n log K), where n is the length of the list.
Auxiliary space: O(K), since we are storing K elements in the heap.
Similar Reads
Python | Minimum K records of Nth index in tuple list
Sometimes, while working with data, we can have a problem in which we need to get the minimum of elements filtered by the Nth element of record. This has a very important utility in web development domain. Letâs discuss certain ways in which this task can be performed. Method #1 : Using filter() + l
9 min read
Python - Records Maxima in List of Tuples
Sometimes, while working with records, we can have a problem in which we need to the maximum all the columns of a container of lists that are tuples. This kind of application is common in the web development domain. Letâs discuss certain ways in which this task can be performed. Method #1 : Using ma
5 min read
Python - Minimum in each record value list
Many times, while dealing with containers in any language we come across lists of tuples in different forms, tuples in themselves can have sometimes more than native datatypes and can have list as their attributes. This article talks about the min of list as tuple attribute. Letâs discuss certain wa
6 min read
Python | Index minimum value Record
In Python, we can bind structural information in the form of tuples and then can retrieve the same, and has manyfold applications. But sometimes we require the information of a tuple corresponding to a minimum value of another tuple index. This functionality has many applications such as ranking. Le
4 min read
Python - Column Minimum in Tuple list
Sometimes, while working with records, we can have a problem in which we need to find min of all the columns of a container of lists which are tuples. This kind of application is common in web development domain. Letâs discuss certain ways in which this task can be performed. Method #1 : Using min()
6 min read
Python - Minimum in tuple list value
Many times, while dealing with containers in any language we come across lists of tuples in different forms, tuples in themselves can have sometimes more than native datatypes and can have list as their attributes. This article talks about the minimum of list as tuple attribute. Letâs discuss certai
5 min read
Python | Find overlapping tuples from list
Sometimes, while working with tuple data, we can have a problem in which we may need to get the tuples which overlap a certain tuple. This kind of problem can occur in Mathematics domain while working with Geometry. Let's discuss certain ways in which this problem can be solved. Method #1 : Using lo
5 min read
Python - Add K to Minimum element in Column Tuple List
Sometimes, while working with Tuple records, we can have a problem in which we need to perform task of adding certain element to max/ min element to each column of Tuple list. This kind of problem can have application in web development domain. Let's discuss a certain way in which this task can be p
8 min read
Python | Minimum element in tuple list
Sometimes, while working with data in form of records, we can have a problem in which we need to find the minimum element of all the records received. This is a very common application that can occur in Data Science domain. Let's discuss certain ways in which this task can be performed. Method #1 :
5 min read
Python - Find Minimum Pair Sum in list
Sometimes, we need to find the specific problem of getting the pair which yields the minimum sum, this can be computed by getting initial two elements after sorting. But in some case, we donât with to change the ordering of list and perform some operation in the similar list without using extra spac
4 min read