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