Python: agrupación de suma de tuplas cruzadas

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)) 
Producción :

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)) 
Producción :

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

Deja una respuesta

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