Dada una Array, ordenar por ocurrencias donde el siguiente elemento es mayor que el actual. Calcule el recuento de i <i + 1 en cada lista, ordene cada fila por el recuento de cada una de estas condiciones en cada fila.
Entrada : test_list = [[4, 6, 2, 9, 10], [5, 3, 2, 5], [2, 4, 5, 6, 7, 7], [6, 3, 2]]
Salida : [[6, 3, 2], [5, 3, 2, 5], [4, 6, 2, 9, 10], [2, 4, 5, 6, 7, 7]]
Explicación : para [ 4, 6, 2, 9, 10], la cuenta es 3 como 6>=4, 9>=2 y 10>=9, de manera similar para [5, 3, 2, 5], [2, 4, 5, 6, 7, 7], [6, 3, 2] los recuentos son 1,4 y 0 respectivamente. Como, 0<1<3<4, el orden de las filas es [6, 3, 2], [5, 3, 2, 5], [4, 6, 2, 9, 10], [2, 4, 5, 6, 7, 7]
Entrada : test_list = [[5, 3, 2, 5], [2, 4, 5, 6, 7, 7], [6, 3, 2]]
Salida : [[6, 3, 2], [5 , 3, 2, 5], [2, 4, 5, 6, 7, 7]]
Explicación : 0 < 1 < 4, es el mayor número de elementos siguientes. Ningún elemento siguiente es mayor en la primera lista.
Método #1: Usar sort() + len()
En esto, realizamos la tarea de ordenar usando sort() y llamamos a la función externa como la clave para resolver el problema de contar elementos con el siguiente elemento mayor. El tamaño se calcula usando len() .
Python3
# Python3 code to demonstrate working of # Sort Matrix by Next Greater Frequency # Using sort() + len() # getting frequency of next greater def get_greater_freq(row): # getting length return len([row[idx] for idx in range(0, len(row) - 1) if row[idx] < row[idx + 1]]) # initializing list test_list = [[4, 6, 2, 9, 10], [5, 3, 2, 5], [2, 4, 5, 6, 7, 7], [6, 3, 2]] # printing original list print("The original list is : " + str(test_list)) # inplace sorting test_list.sort(key=get_greater_freq) # printing result print("Sorted rows : " + str(test_list))
Producción:
La lista original es: [[4, 6, 2, 9, 10], [5, 3, 2, 5], [2, 4, 5, 6, 7, 7], [6, 3, 2]]
Filas ordenadas: [[6, 3, 2], [5, 3, 2, 5], [4, 6, 2, 9, 10], [2, 4, 5, 6, 7, 7]]
Método #2: Usar sorted() + len() + lambda
En esto, realizamos la tarea de clasificar utilizando sorted(), lambda y len() se utilizan para crear una funcionalidad de una sola línea para realizar la clasificación en función del número de elementos mayor que su elemento anterior.
Python3
# Python3 code to demonstrate working of # Sort Matrix by Next Greater Frequency # Using sorted() + len() + lambda # initializing list test_list = [[4, 6, 2, 9, 10], [5, 3, 2, 5], [2, 4, 5, 6, 7, 7], [6, 3, 2]] # printing original list print("The original list is : " + str(test_list)) # performing one-liner sorting # avoiding external fnc. call res = sorted(test_list, key=lambda row: len( [row[idx] for idx in range(0, len(row) - 1) if row[idx] < row[idx + 1]])) # printing result print("Sorted rows : " + str(res))
Producción:
La lista original es: [[4, 6, 2, 9, 10], [5, 3, 2, 5], [2, 4, 5, 6, 7, 7], [6, 3, 2]]
Filas ordenadas: [[6, 3, 2], [5, 3, 2, 5], [4, 6, 2, 9, 10], [2, 4, 5, 6, 7, 7]]
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