Python: une tuplas si el elemento inicial es similar

A veces, mientras trabajamos con tuplas de Python, podemos tener un problema en el que necesitamos realizar una concatenación de registros a partir de la similitud del elemento inicial. Este problema puede tener aplicaciones en dominios de datos como Data Science. Analicemos ciertas formas en que se puede realizar esta tarea.

Entrada : test_list = [(5, 6), (5, 7), (5, 8), (6, 10), (7, 13)] Salida : [(5, 6, 7, 8), (6 , 10), (7, 13)] Entrada : test_list = [(5, 6), (6, 7), (6, 8), (6, 10), (7, 13)] Salida : [(5 , 6), (6, 7, 8, 10), (7, 13)]

Método n.º 1: Uso del bucle Esta es la forma bruta en la que se puede realizar esta tarea. En esto, creamos una nueva tupla, si no encontramos ninguna ocurrencia de valores de tupla similares anteriormente. El corte se usa para agregar el resto de elementos a la tupla creada. 

Python3

# Python3 code to demonstrate working of
# Join Tuples if similar initial element
# Using loop
 
# initializing list
test_list = [(5, 6), (5, 7), (6, 8), (6, 10), (7, 13)]
 
# printing original list
print("The original list is : " + str(test_list))
 
# Join Tuples if similar initial element
# Using loop
res = []
for sub in test_list:                                          
    if res and res[-1][0] == sub[0]:             
        res[-1].extend(sub[1:])                       
    else:
        res.append([ele for ele in sub])    
res = list(map(tuple, res))
 
# printing result
print("The extracted elements : " + str(res))
Producción : 

The original list is : [(5, 6), (5, 7), (6, 8), (6, 10), (7, 13)]
The extracted elements : [(5, 6, 7), (6, 8, 10), (7, 13)]

  Método #2: Uso de defaultdict() + loop La combinación de las funciones anteriores se puede usar para resolver este problema. Las ventajas que ofrece el método anterior son que reduce una verificación de inicialización de nueva clave y también funciona bien incluso si elementos similares no son consecutivos. 

Python3

# Python3 code to demonstrate working of
# Join Tuples if similar initial element
# Using defaultdict() + loop
from collections import defaultdict
 
# initializing list
test_list = [(5, 6), (5, 7), (6, 8), (6, 10), (7, 13)]
 
# printing original list
print("The original list is : " + str(test_list))
 
# Join Tuples if similar initial element
# Using defaultdict() + loop
mapp = defaultdict(list)
for key, val in test_list:
    mapp[key].append(val)
res = [(key, *val) for key, val in mapp.items()]
 
# printing result
print("The extracted elements : " + str(res))
Producción : 

The original list is : [(5, 6), (5, 7), (6, 8), (6, 10), (7, 13)]
The extracted elements : [(5, 6, 7), (6, 8, 10), (7, 13)]

La Complejidad de Tiempo y Espacio es la misma para ambos métodos:

Complejidad de tiempo: O(n)

Complejidad espacial: O(n)

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 *