Programa de Python a una array de clasificación por recuento de igualdad de valor de índice

Dada una Array, la tarea es escribir un programa en Python que pueda ordenar sus filas o columnas en una medida del número de valores igual a su número de índice. Para cada fila o columna, cuente las ocurrencias de igualdad de número de índice con valor. Después de calcular este recuento para cada fila o columna, ordene la array según el recuento extraído para cada fila o columna en el paso 1.

Entrada : lista_prueba = [[3, 1, 2, 5, 4], [0, 1, 2, 3, 4], [6, 5, 4, 3, 2], [0, 5, 4, 2] ] 
Salida : [[6, 5, 4, 3, 2], [0, 5, 4, 2], [3, 1, 2, 5, 4], [0, 1, 2, 3, 4]] 
Explicación : 0 < 2 < 3 < 5 está ordenando el recuento de la igualdad de elementos de índice. 2 es igual a su posición de índice en la segunda lista.

Entrada : test_list = [[0, 1, 2, 3, 4], [6, 5, 4, 3, 2], [0, 5, 4, 2]] 
Salida : [[6, 5, 4, 3 , 2], [0, 5, 4, 2], [0, 1, 2, 3, 4]] 
Explicación : 0 < 2 < 5 está ordenando el recuento de la igualdad de elementos de índice. Todos los elementos en la última lista son iguales a su índice, por lo tanto, el recuento devuelto. 
 

Ordenar filas

Método 1: Usar sort() , len() y enumerate()

En esto, verificamos la igualdad del índice y el elemento comparando los componentes enumerados, la suma del resultado se realiza extrayendo la longitud de la lista. Esto se pasa como clave a sort() que realiza la clasificación en el lugar.

Ejemplo:

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))

Producción:

La lista original es: [[3, 1, 2, 5, 4], [0, 1, 2, 3, 4], [6, 5, 4, 3, 2], [0, 5, 4, 2 ]]

Lista ordenada: [[6, 5, 4, 3, 2], [0, 5, 4, 2], [3, 1, 2, 5, 4], [0, 1, 2, 3, 4]]

Método 2: Usar sorted() , lambda , len() y enumerate()

En esto, realizamos la tarea de ordenar usando sorted() y la función lambda proporciona utilidad para ordenar combinado con len() y enumerate().

Ejemplo:

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))

Producción:

La lista original es: [[3, 1, 2, 5], [0, 1, 2, 3], [6, 5, 4, 3], [0, 5, 4, 2]]

Lista ordenada: [[6, 5, 4, 3], [0, 5, 4, 2], [3, 1, 2, 5], [0, 1, 2, 3]]

Clasificación de columnas

Método 1: Usar sort() , len() y enumerate()

En esto, realizamos la transposición de la array base y luego realizamos la tarea habitual de obtener el recuento de igualdad de valores de índice utilizando el método 1 anterior, después de ordenar, la array se convierte nuevamente a su formato transpuesto. 

Ejemplo:
 

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))

Producción:

La lista original es: [[3, 1, 2, 5], [0, 1, 2, 3], [6, 5, 4, 3], [0, 5, 4, 2]]

Lista ordenada: [[3, 2, 5, 1], [0, 2, 3, 1], [6, 4, 3, 5], [0, 4, 2, 5]]

Método 2: Usar sorted() , lambda , len() y enumerate()

En esto, realizamos la transposición de la array base y luego realizamos la tarea habitual de obtener el recuento de igualdad de valores de índice utilizando el método 2 anterior, después de ordenar, la array se convierte nuevamente a su formato transpuesto. 

Ejemplo:

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))

Producción:

La lista original es: [[3, 1, 2, 5], [0, 1, 2, 3], [6, 5, 4, 3], [0, 5, 4, 2]]

Lista ordenada: [[3, 2, 5, 1], [0, 2, 3, 1], [6, 4, 3, 5], [0, 4, 2, 5]]

Publicación traducida automáticamente

Artículo escrito por manjeet_04 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *