Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Python program to a Sort Matrix by index-value equality count

  • Difficulty Level : Easy
  • Last Updated : 18 Jul, 2021

Given a Matrix, the task is to write a Python program that can sort its rows or columns on a measure of the number of values equal to its index number. For each row or column, count occurrences of equality of index number with value. After computation of this count for each row or column, sort the matrix on basis of the count extracted for each row or column in step 1.

Input : test_list = [[3, 1, 2, 5, 4], [0, 1, 2, 3, 4], [6, 5, 4, 3, 2], [0, 5, 4, 2]] 
Output : [[6, 5, 4, 3, 2], [0, 5, 4, 2], [3, 1, 2, 5, 4], [0, 1, 2, 3, 4]] 
Explanation : 0 < 2 < 3 < 5 is ordering for count of index-element equality. 2 is equal to its index position in 2nd list.

 Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.  

To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course. And to begin with your Machine Learning Journey, join the Machine Learning - Basic Level Course

Input : test_list = [[0, 1, 2, 3, 4], [6, 5, 4, 3, 2], [0, 5, 4, 2]] 
Output : [[6, 5, 4, 3, 2], [0, 5, 4, 2], [0, 1, 2, 3, 4]] 
Explanation : 0 < 2 < 5 is ordering for count of index-element equality. All elements in last list are equal to its index hence the returned count. 
 



Sorting rows

Method 1 : Using sort(), len() and enumerate()

In this, we check for index and element equality by comparing enumerate components, the summation of result is done by extracting length of list. This is passed as key to sort() which performs inplace sorting.

Example:

Python3




# Python3 code to demonstrate working of
# Sort Matrix by index-value equality count
# Using sort() + len() + enumerate()
  
  
def get_idx_ele_count(row):
  
    # getting required count
    # element and index compared, if equal added
    # in list, length computed using len()
    return len([ele for idx, ele in enumerate(row) if ele == idx])
  
  
# initializing list
test_list = [[3, 1, 2, 5, 4], [0, 1, 2, 3, 4], 
             [6, 5, 4, 3, 2], [0, 5, 4, 2]]
  
# printing original list
print("The original list is : " + str(test_list))
  
# inplace sorting using sort()
test_list.sort(key=get_idx_ele_count)
  
# printing result
print("Sorted List : " + str(test_list))

Output:

The original list is : [[3, 1, 2, 5, 4], [0, 1, 2, 3, 4], [6, 5, 4, 3, 2], [0, 5, 4, 2]]

Sorted List : [[6, 5, 4, 3, 2], [0, 5, 4, 2], [3, 1, 2, 5, 4], [0, 1, 2, 3, 4]]

Method 2 : Using sorted(), lambda, len() and enumerate()

In this, we perform task of sorting using sorted() and lambda function provides utility to sort combined with len() and enumerate().



Example:

Python3




# Python3 code to demonstrate working of
# Sort Matrix by index-value equality count
# Using sorted() + lambda + len() + enumerate()
  
# initializing list
test_list = [[3, 1, 2, 5], [0, 1, 2, 3], 
             [6, 5, 4, 3], [0, 5, 4, 2]]
  
# printing original list
print("The original list is : " + str(test_list))
  
# sorting using sorted()
# utility injection using lambda
# element and index compared, if equal added in list,
# length computed using len()
res = sorted(test_list, key=lambda row: len(
    [ele for idx, ele in enumerate(row) if ele == idx]))
  
# printing result
print("Sorted List : " + str(res))

Output:

The original list is : [[3, 1, 2, 5], [0, 1, 2, 3], [6, 5, 4, 3], [0, 5, 4, 2]]

Sorted List : [[6, 5, 4, 3], [0, 5, 4, 2], [3, 1, 2, 5], [0, 1, 2, 3]]

Sorting columns

Method 1 : Using sort(), len() and enumerate()

In this, we perform transpose of base matrix, and then perform usual task of getting index-value equality count using above method 1, after sorting, matrix is again converted to its transposed format. 

Example:
 

Python3




# Python3 code to demonstrate working of
# Sort Matrix by index-value equality count
# Using sort() + len() + enumerate()
  
  
def get_idx_ele_count(row):
  
    # getting required count
    # element and index compared, if equal added in 
    # list, length computed using len()
    return len([ele for idx, ele in enumerate(row) if ele == idx])
  
  
# initializing list
test_list = [[3, 1, 2, 5], [0, 1, 2, 3], 
             [6, 5, 4, 3], [0, 5, 4, 2]]
  
# printing original list
print("The original list is : " + str(test_list))
  
# transposing matrix
test_list = list(zip(*test_list))
  
# inplace sorting using sort()
test_list.sort(key=get_idx_ele_count)
  
# performing transpose again to get result.
test_list = zip(*test_list)
  
# converting list of tuples to list of lists
res = [list(sub) for sub in test_list]
  
# printing result
print("Sorted List : " + str(res))

Output:

The original list is : [[3, 1, 2, 5], [0, 1, 2, 3], [6, 5, 4, 3], [0, 5, 4, 2]]

Sorted List : [[3, 2, 5, 1], [0, 2, 3, 1], [6, 4, 3, 5], [0, 4, 2, 5]]

Method 2 : Using sorted(), lambda, len() and enumerate()

In this, we perform transpose of base matrix, and then perform usual task of getting index-value equality count using above method 2, after sorting, matrix is again converted to its transposed format. 

Example:

Python3




# Python3 code to demonstrate working of
# Sort Matrix by index-value equality count
# Using sorted() + lambda + len() + enumerate()
  
# initializing list
test_list = [[3, 1, 2, 5], [0, 1, 2, 3],
             [6, 5, 4, 3], [0, 5, 4, 2]]
  
# printing original list
print("The original list is : " + str(test_list))
  
# transposing matrix
test_list = zip(*test_list)
  
# sorting using sorted()
# utility injection using lambda
# element and index compared, if equal added in
# list, length computed using len()
res = sorted(test_list, key=lambda row: len(
    [ele for idx, ele in enumerate(row) if ele == idx]))
  
# performing transpose again to get result.
res = zip(*res)
  
# converting list of tuples to list of lists
res = [list(sub) for sub in res]
  
# printing result
print("Sorted List : " + str(res))

Output:

The original list is : [[3, 1, 2, 5], [0, 1, 2, 3], [6, 5, 4, 3], [0, 5, 4, 2]]

Sorted List : [[3, 2, 5, 1], [0, 2, 3, 1], [6, 4, 3, 5], [0, 4, 2, 5]]




My Personal Notes arrow_drop_up
Recommended Articles
Page :