Python: ordena la array por número de elementos mayor que su elemento anterior

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

Deja una respuesta

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