Python Program to Sort Matrix Rows by summation of consecutive difference of elements
Given a Matrix, the following article depicts how to sort rows of a matrix on the basis of summation of difference between consecutive elements of a row.
Input : test_list = [[1, 5, 3, 6], [4, 3, 2, 1], [7, 2, 4, 5], [6, 9, 3, 2]],
Output : [[4, 3, 2, 1], [7, 2, 4, 5], [1, 5, 3, 6], [6, 9, 3, 2]]
Explanation : 4 < 8 < 9 < 10 is consecutive difference summation.
Input : test_list = [[1, 5, 3, 6], [7, 2, 4, 5], [6, 9, 3, 2]],
Output : [[7, 2, 4, 5], [1, 5, 3, 6], [6, 9, 3, 2]]
Explanation : 8 < 9 < 10 is consecutive difference summation.
Method 1 : Using sort() and abs()
In this, we perform task of in-place sorting using sort() and abs() is used to get the absolute value of the summation of consecutive difference.
Python3
# get abs summation def diff_sum(row): return sum ([ abs (row[idx + 1 ] - row[idx]) for idx in range ( 0 , len (row) - 1 )]) # initializing list test_list = [[ 1 , 5 , 3 , 6 ], [ 4 , 3 , 2 , 1 ], [ 7 , 2 , 4 , 5 ], [ 6 , 9 , 3 , 2 ]] # printing original list print ( "The original list is : " + str (test_list)) # performing inplace sort test_list.sort(key = diff_sum) # printing result print ( "Sorted Rows : " + str (test_list)) |
Output:
The original list is : [[1, 5, 3, 6], [4, 3, 2, 1], [7, 2, 4, 5], [6, 9, 3, 2]]
Sorted Rows : [[4, 3, 2, 1], [7, 2, 4, 5], [1, 5, 3, 6], [6, 9, 3, 2]]
Time Complexity: O(nlogn+mlogm)
Auxiliary Space: O(k)
Method 2 : Using sorted(), lambda, abs() and sum()
In this, the sorting is done using sorted() and lambda function is used to inject conditional statement in sorted().
Python3
# initializing list test_list = [[ 1 , 5 , 3 , 6 ], [ 4 , 3 , 2 , 1 ], [ 7 , 2 , 4 , 5 ], [ 6 , 9 , 3 , 2 ]] # printing original list print ( "The original list is : " + str (test_list)) # performing sort res = sorted (test_list, key = lambda row: sum ( [ abs (row[idx + 1 ] - row[idx]) for idx in range ( 0 , len (row) - 1 )])) # printing result print ( "Sorted Rows : " + str (res)) |
Output:
The original list is : [[1, 5, 3, 6], [4, 3, 2, 1], [7, 2, 4, 5], [6, 9, 3, 2]]
Sorted Rows : [[4, 3, 2, 1], [7, 2, 4, 5], [1, 5, 3, 6], [6, 9, 3, 2]]
Time Complexity: O(nlogn+mlogm)
Auxiliary Space: O(k)
Please Login to comment...