A veces, mientras trabajamos con registros de tupla de Python, podemos tener un problema en el que necesitamos realizar una agrupación de suma del primer elemento del par de tupla con un segundo elemento de tupla similar. Este tipo de problema puede tener aplicación en la programación día a día. Analicemos ciertas formas en que se puede realizar esta tarea.
Entrada : test_list = [(1, 5), (7, 4), (9, 6), (11, 6)]
Salida : [(7, 4), (1, 5), (20, 6)]Entrada : test_list = [(1, 8)]
Salida : [(1, 8)]
Método n.º 1: Usar bucle
Esta es una forma de fuerza bruta en la que se puede realizar esta tarea. En esto, buscamos segundos elementos similares y realizamos la suma hasta entonces y realizamos la agrupación acumulada.
# Python3 code to demonstrate working of # Cross tuple summation grouping # Using loop # initializing list test_list = [(4, 5), (7, 5), (8, 6), (10, 6), (10, 4), (6, 7), (3, 7)] # printing original list print("The original list is : " + str(test_list)) # Concatenate Similar Key values # Using loop temp = dict() for ele1, ele2 in test_list: temp[ele2] = temp.get(ele2, 0) + ele1 res = [(ele2, ele1) for (ele1, ele2) in temp.items()] # printing result print("The grouped records are : " + str(res))
The original list is : [(4, 5), (7, 5), (8, 6), (10, 6), (10, 4), (6, 7), (3, 7)] The grouped records are : [(10, 4), (11, 5), (18, 6), (9, 7)]
Método n.° 2: usar groupby() + sum() + zip()
la comprensión de lista +
La combinación de las funciones anteriores se puede usar para resolver este problema. En esto, realizamos la tarea de encontrar la suma usando sum(). La tarea de agrupar la realiza groupby().
# Python3 code to demonstrate working of # Cross tuple summation grouping # Using groupby() + sum() + zip() + list comprehension from itertools import groupby # initializing list test_list = [(4, 5), (7, 5), (8, 6), (10, 6), (10, 4), (6, 7), (3, 7)] # printing original list print("The original list is : " + str(test_list)) # Concatenate Similar Key values # Using groupby() + sum() + zip() + list comprehension res = [(sum(next(zip(*ele))), key) for key, ele in groupby( test_list, key = lambda tup:tup[1])] # printing result print("The grouped records are : " + str(res))
The original list is : [(4, 5), (7, 5), (8, 6), (10, 6), (10, 4), (6, 7), (3, 7)] The grouped records are : [(10, 4), (11, 5), (18, 6), (9, 7)]
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