Python: el par de suma más cercano en la lista

A veces, deseamos obtener los elementos que suman un elemento en particular. Pero en los casos en que no somos capaces de encontrar eso, nuestro objetivo cambia para ser uno para encontrar el más cercano. Esto puede tener aplicación en muchos dominios. Analicemos ciertas formas en que se puede realizar esta tarea.

Método #1: Uso de la comprensión del diccionario +max()
La combinación de las funcionalidades anteriores se puede utilizar para realizar esta tarea. En esto, realizamos la parte lógica en la comprensión del diccionario y el par más cercano se extrae usando max(). La lista debe ordenarse para realizar este método.

# Python3 code to demonstrate 
# Closest Sum Pair in List
# using dictionary comprehension + max()
  
# Initializing list
test_list = [7, 8, 10, 3, 18, 1]
  
# printing original list
print("The original list is : " + str(test_list))
  
# Initializing K 
K = 12
  
# Closest Sum Pair in List
# using dictionary comprehension + max()
test_list.sort()
res = { i + j :(i, j) for i in test_list for j in test_list if i != j and i + j < K}
res = max(res)
  
# printing result 
print ("The closest sum pair is : " + str(res))
Producción :

The original list is : [7, 8, 10, 3, 18, 1]
The closest sum pair is : 11

Método n.º 2: Uso de bucle +combinations()
Esta es otra forma más en la que se puede realizar esta tarea. En esto, iteramos a través de la lista, calculamos todos los pares posibles y devolvemos la suma más cercana posible generada usando min(). Esto devuelve pares reales.

# Python3 code to demonstrate 
# Closest Sum Pair in List
# using loop + combinations
from itertools import combinations
  
# Initializing list
test_list = [7, 8, 10, 3, 18, 1]
  
# printing original list
print("The original list is : " + str(test_list))
  
# Initializing K 
K = 12
  
# Closest Sum Pair in List
# using dictionary comprehension + max()
res = {}
for ele in combinations(test_list, 2):
    ele_sum = sum(ele)
    try:
        res[ele_sum].append(ele)
    except KeyError:
        res[ele_sum] = [ele]
res = res[min(res, key = lambda ele: abs(ele - K))]
  
# printing result 
print ("The closest sum pair is : " + str(res))
Producción :

The original list is : [7, 8, 10, 3, 18, 1]
The closest sum pair is : [(8, 3), (10, 1)]

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 *