Programa de Python para encontrar la suma de la diferencia absoluta entre todos los pares en una lista

Dada una lista de elementos distintos, escriba un programa Python para encontrar la suma de las diferencias absolutas de todos los pares en la lista dada.
Ejemplos: 
 

Input : [9, 2, 14] 
Output : 24 
Explanation: (abs(9-2) + abs(9-14) + abs(2-14))

Input : [1, 2, 3, 4]
Output : 10 
Explanation: (abs(1-2) + abs(1-3) + abs(1-4)
             + abs(2-3) + abs(2-4) + abs(3-4))

El primer enfoque es el enfoque de fuerza bruta, que se ha discutido anteriormente . Aquí, discutiremos los enfoques pythonicos.
Enfoque n. ° 1: usar el método enumerate() 
Enumerate() agrega un contador a un iterable y lo devuelve en forma de objeto enumerado. En este método, tenemos una lista de ‘diferencias’ que contiene la diferencia absoluta. Usamos dos bucles que tienen dos variables cada uno. Uno para iterar a través del contador y otro para el elemento de lista. En cada iteración, comprobamos si los elementos son similares o no. Si no, encuentre la diferencia absoluta y agréguela a diffs. Finalmente, encuentre la suma de la lista. Como cada par se contará dos veces, dividimos la suma final por 2 y la devolvemos. 
 

Python3

# Python3 program to find sum of
# absolute differences in all pairs
 
def sumPairs(lst):
     
    diffs = []
    for i, x in enumerate(lst):
        for j, y in enumerate(lst):
            if i != j:
                diffs.append(abs(x-y))
             
    return int(sum(diffs)/2)
   
# Driver program
lst = [1, 2, 3, 4]
print(sumPairs(lst))
Producción

10

  
Enfoque #2: Uso de itertools 
Las itertools de Python consisten en el método de permutación() . Este método toma una lista como entrada y devuelve una lista de objetos de tuplas que contienen todas las permutaciones en forma de lista. Aquí, para encontrar la diferencia absoluta, esencialmente necesitamos una permutación de dos elementos. Como cada par se contará dos veces, dividimos la suma final por 2.
 

Python3

# Python3 program to find sum of
# absolute differences in all pairs
import itertools
 
def sumPairs(lst):
     
    diffs = [abs(e[1] - e[0]) for e in itertools.permutations(lst, 2)]
    return int(sum(diffs)/2)
   
# Driver program
lst = [9, 8, 1, 16, 15]
print(sumPairs(lst))
Producción

74

Enfoque n. ° 3 : usar una array ordenada

En este método, comenzamos con la clasificación de la array y realizamos un seguimiento de la suma de la lista de elementos y restamos el índice de trabajo una vez que hayamos terminado. En realidad, estamos restando (i * <número de elementos mayores o iguales que i>) de la suma del número de elementos mayores o iguales que i en la array.

Python3

lst = [2, 4, 1, 3]
 
# first we sort the array
lst = sorted(lst)
summ = sum(lst)  # it is a very important variable to us
 
result = 0
 
for d, i in enumerate(lst):  # enumerate([6, 7, 8]) = [(0, 6), (1, 7), (2, 8)]
    result += summ - (i * (len(lst) - d))
    # first index of above will look like this: 10 - 1*4 = 4-1 + 3-1 + 2-1 + 1-1
 
    summ -= i  # for instance in the second i we dont want 1-2, so we get rid of it
     
print(result)
Producción

10

Publicación traducida automáticamente

Artículo escrito por Smitha Dinesh Semwal 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 *