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))
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))
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)
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