Dado un rango, ordene la array de tupla por el rango total cubierto en un rango dado. [Considerando las tuplas que se encuentran completamente dentro del rango].
Entrada : test_list = [[(1, 5), (6, 10), (10, 15)], [(3, 16)], [(2, 4), (6, 8), (9, 14) )], [(1, 3), (9, 13)]], i, j = 2, 15
Salida : [[(3, 16)], [(1, 5), (6, 10), ( 10, 15)], [(1, 3), (9, 13)], [(2, 4), (6, 8), (9, 14)]]
Explicación : 0 < 4 < 4 < 9, es la magnitud del rango cubierto en las listas de tuplas.Entrada : test_list = [[(1, 5), (6, 10), (10, 15)], [(3, 16)], [(2, 4), (6, 8), (9, 14) )]], i, j = 2, 15
Salida : [[(3, 16)], [(1, 5), (6, 10), (10, 15)], [(2, 4), ( 6, 8), (9, 14)]]
Explicación : 0 < 4 < 9, es la magnitud del rango cubierto en las listas de tuplas.
Método #1: Usar sort() + sum()
En esto, la ordenación en el lugar se realiza usando sort(), y la suma de rangos en el rango dado se realiza usando sum() y comprensión de listas con condiciones.
Python3
# Python3 code to demonstrate working of # Sort by range inclusion # Using sort() + sum() def range_sum(row): # summing in range element return sum([abs(sub[1] - sub[0]) for sub in row if sub[0] > i and sub[0] < j and sub[1] > i and sub[1] < j]) # initializing list test_list = [[(1, 5), (6, 10), (10, 15)], [(3, 16)], [ (2, 4), (6, 8), (9, 14)], [(1, 3), (9, 13)]] # printing original list print("The original list is : " + str(test_list)) # initializing range i, j = 2, 15 # inplace sorting using sort() test_list.sort(key=range_sum) # printing result print("Sorted List : " + str(test_list))
Producción:
La lista original es: [[(1, 5), (6, 10), (10, 15)], [(3, 16)], [(2, 4), (6, 8), (9, 14)], [(1, 3), (9, 13)]]
Lista ordenada: [[(3, 16)], [(1, 5), (6, 10), (10, 15)], [(1, 3), (9, 13)], [(2, 4), (6, 8), (9, 14)]]
Método #2: Usar sorted() + lambda + sum()
En esto, realizamos la tarea de ordenar usando sorted() y la inyección de utilidad usando la función lambda, la suma se realiza usando sum().
Python3
# Python3 code to demonstrate working of # Sort by range inclusion # Using sorted() + lambda + sum() # initializing list test_list = [[(1, 5), (6, 10), (10, 15)], [(3, 16)], [ (2, 4), (6, 8), (9, 14)], [(1, 3), (9, 13)]] # printing original list print("The original list is : " + str(test_list)) # initializing range i, j = 2, 15 # sorting using sorted() + lambda res = sorted(test_list, key=lambda row: sum( [abs(sub[1] - sub[0]) for sub in row if sub[0] > i and sub[0] < j and sub[1] > i and sub[1] < j])) # printing result print("Sorted List : " + str(res))
Producción:
La lista original es: [[(1, 5), (6, 10), (10, 15)], [(3, 16)], [(2, 4), (6, 8), (9, 14)], [(1, 3), (9, 13)]]
Lista ordenada: [[(3, 16)], [(1, 5), (6, 10), (10, 15)], [(1, 3), (9, 13)], [(2, 4), (6, 8), (9, 14)]]
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