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