Python | Flatten and Reverse Sort Matrix
Last Updated :
18 May, 2023
The flattening of list of list has been discussed many times, but sometimes, in addition to flattening, it is also required to get the string in reverse sorted manner. Let’s discuss certain ways in which this can be done.
Method #1: Using sorted() + reverse + list comprehension This idea is similar to flattening a list of list but in addition to it, we add a sorted function along with reverse as key, to reverse sort the returned flattened list done by list comprehension.
Python3
test_list = [[ 3 , 5 ], [ 7 , 3 , 9 ], [ 1 , 12 ]]
print ( "The original list : " + str (test_list))
res = sorted ([j for i in test_list for j in i], reverse = True )
print ( "The reverse sorted and flattened list : " + str (res))
|
Output
The original list : [[3, 5], [7, 3, 9], [1, 12]]
The reverse sorted and flattened list : [12, 9, 7, 5, 3, 3, 1]
Time Complexity: O(nlogn), where n is the length of the input list. This is because we’re using the sorted() + reverse + list comprehension which has a time complexity of O(nlogn) in the worst case.
Auxiliary Space: O(n), as we’re using additional space res other than the input list itself with the same size of input list.
Method #2: Using itertools.chain() + sorted() + reverse The task that was done by list comprehension above can also be performed using the chain function that links elements of list and then sorted function does the task of sorting with the help of reverse for reverse sorting.
Python3
from itertools import chain
test_list = [[ 3 , 5 ], [ 7 , 3 , 9 ], [ 1 , 12 ]]
print ( "The original list : " + str (test_list))
res = sorted (chain( * test_list), reverse = True )
print ( "The reverse sorted and flattened list : " + str (res))
|
Output
The original list : [[3, 5], [7, 3, 9], [1, 12]]
The reverse sorted and flattened list : [12, 9, 7, 5, 3, 3, 1]
Time Complexity: O(n*nlogn), where n is the number of elements in the list “test_list”.
Auxiliary Space: O(n), where n is the number of elements in the list “test_list”.
Method #3 : Using extend() and sort() methods
Python3
test_list = [[ 3 , 5 ], [ 7 , 3 , 9 ], [ 1 , 12 ]]
print ( "The original list : " + str (test_list))
res = []
for i in test_list:
res.extend(i)
res.sort(reverse = True )
print ( "The reverse sorted and flattened list : " + str (res))
|
Output
The original list : [[3, 5], [7, 3, 9], [1, 12]]
The reverse sorted and flattened list : [12, 9, 7, 5, 3, 3, 1]
Time Complexity: O(nlogn), where n is the number of elements in the list “test_list”.
Auxiliary Space: O(n), where n is the number of elements in the list “test_list”.
Method #4: Using recursion
Python3
def flatten(lst):
if not lst:
return []
if isinstance (lst[ 0 ], list ):
return flatten(lst[ 0 ]) + flatten(lst[ 1 :])
return lst[: 1 ] + flatten(lst[ 1 :])
test_list = [[ 3 , 5 ], [ 7 , 3 , 9 ], [ 1 , 12 ]]
print ( "The original list : " + str (test_list))
res = sorted (flatten(test_list), reverse = True )
print ( "The reverse sorted and flattened list : " + str (res))
|
Output
The original list : [[3, 5], [7, 3, 9], [1, 12]]
The reverse sorted and flattened list : [12, 9, 7, 5, 3, 3, 1]
Time complexity : O(n log n)
Auxiliary Space: O(n)
Method 5: Use a stack and a while loop.
Step-by-step approach:
- Initialize an empty list flat_list to store the flattened list.
- Initialize a stack stack with the input list lst.
- Use a while loop to iterate through the stack until it becomes empty.
- Pop the last element from the stack and check if it is a list or not using isinstance() function. If it is a list, extend the stack with its elements in reverse order. If it is not a list, append it to flat_list.
- Use sorted() function with the reverse=True parameter to sort the flat_list in reverse order.
- Return the sorted flattened list.
Python3
def flatten(lst):
flat_list = []
stack = [lst]
while stack:
item = stack.pop()
if isinstance (item, list ):
stack.extend(item[:: - 1 ])
else :
flat_list.append(item)
return sorted (flat_list, reverse = True )
test_list = [[ 3 , 5 ], [ 7 , 3 , 9 ], [ 1 , 12 ]]
print ( "The original list : " + str (test_list))
res = flatten(test_list)
print ( "The reverse sorted and flattened list : " + str (res))
|
Output
The original list : [[3, 5], [7, 3, 9], [1, 12]]
The reverse sorted and flattened list : [12, 9, 7, 5, 3, 3, 1]
Time complexity: O(n log n), where n is the total number of elements in the input list lst. The sorted() function takes O(n log n) time to sort the flattened list in reverse order.
Auxiliary space: O(n), where n is the total number of elements in the input list lst.
Method 6: Using a generator function and heapq
Python3
import heapq
def flatten_and_sort(lst):
def flatten_generator(lst):
for item in lst:
if isinstance (item, list ):
yield from flatten_generator(item)
else :
yield item
flat_list = list (flatten_generator(lst))
heapq.heapify(flat_list)
sorted_list = []
while flat_list:
sorted_list.append(heapq.heappop(flat_list))
return sorted_list[:: - 1 ]
test_list = [[ 3 , 5 ], [ 7 , 3 , 9 ], [ 1 , 12 ]]
print ( "The original list: " + str (test_list))
res = flatten_and_sort(test_list)
print ( "The reverse sorted and flattened list: " + str (res))
|
Output
The original list: [[3, 5], [7, 3, 9], [1, 12]]
The reverse sorted and flattened list: [12, 9, 7, 5, 3, 3, 1]
Time complexity is O(n + n + n log n) = O(n log n).
The auxiliary space is O(n) because we create a flat list to store all the elements before sorting them.
Similar Reads
Python | Reverse Sort Row Matrix integration
Often during problem solving we come across to many problems where we need to reverse sort the list. But sometimes we would also want to reverse sort another list so that the elements of are automatically shifted and remain at same index as the first list even after first list get reverse sorted. Le
7 min read
Python - Reverse sort Matrix Row by Kth Column
Sometimes, while working with data, we can have a problem in which we need to perform sorting of each row of records by some of decisive factor like score. This kind of problem is common in competitive programming and web development. Lets discuss certain ways in which this task can be performed. Me
4 min read
Python - Reverse Row sort in Lists of List
We are given a list of lists where each inner list represents a row and our task is to sort each row in descending order while keeping the overall structure intact. For example, given a = [[5, 2, 8], [9, 1, 4], [6, 7, 3]], after sorting each row in reverse order, the result will be [[8, 5, 2], [9, 4
3 min read
Python | Row lengths in Matrix
The problems concerning matrix are quite common in both competitive programming and Data Science domain. One such problem that we might face is of finding the lengths of rows of matrix in uneven sized matrix. Let's discuss certain ways in which this problem can be solved. Method #1 : Using max() + m
4 min read
Python Program to Reverse Every Kth row in a Matrix
We are given a matrix (a list of lists) and an integer K. Our task is to reverse every Kth row in the matrix. For example: Input : a = [[5, 3, 2], [8, 6, 3], [3, 5, 2], [3, 6], [3, 7, 4], [2, 9]], K = 4 Output : [[5, 3, 2], [8, 6, 3], [3, 5, 2], [6, 3], [3, 7, 4], [2, 9]]Using reversed() and loopWe
5 min read
How to Reverse a Dictionary in Python
Reversing a dictionary typically means swapping the keys and values, where the keys become the values and the values become the keys. In this article, we will explore how to reverse a dictionary in Python using a variety of methods. Using Dictionary ComprehensionDictionary comprehension is a concise
2 min read
Reverse Sort a String - Python
The goal is to take a given string and arrange its characters in descending order based on their Unicode values. For example, in the string "geeksforgeeks", the characters will be sorted from highest to lowest, resulting in a new string like "ssrokkggfeeeee". Let's understand different methods to pe
2 min read
Python Program to Print a given matrix in reverse spiral form
Given a 2D array, print it in reverse spiral form. We have already discussed Print a given matrix in spiral form. This article discusses how to do the reverse printing. See the following examples. Input: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Output: 10 11 7 6 5 9 13 14 15 16 12 8 4 3 2 1 Input: 1 2
5 min read
Python - Filter Sorted Rows
Given a Matrix, extract rows that are sorted, either by ascending or descending. Input : test_list = [[3, 6, 8, 10], [1, 8, 2, 4, 3], [8, 5, 3, 2], [1, 4, 5, 3]] Output : [[3, 6, 8, 10], [8, 5, 3, 2]] Explanation : Both lists are ordered, 1st ascending, second descending. Input : test_list = [[3, 6,
3 min read
Type Casting Whole List and Matrix - Python
The task of type casting a whole list and matrix in Python involves converting all elements of a list or a matrix to a specific data type while preserving the structure. Given a list or matrix of integers, the goal is to transform each element into another data type, such as a string or float, effic
3 min read