Python – Ordenar por inclusión de rango

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

Deja una respuesta

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