Python – Eliminar tuplas de subconjuntos duplicados

A veces, mientras trabajamos con tuplas de Python, podemos tener un problema en el que necesitamos realizar la eliminación de tuplas, que ya están presentes como subconjuntos en otras tuplas. Este tipo de problema puede ser útil en el preprocesamiento de datos. Analicemos ciertas formas en que se puede realizar esta tarea.
 

Entrada : test_list = [(6, 9, 17, 18), (15, 34, 56), (6, 7, 10), (6, 7), (6, 9), (15, 34)], K = 2 
Salida : [(6, 9, 17, 18), (15, 34, 56), (6, 7, 10)]
Entrada : test_list = [(6, 9, 17, 18), (15, 34, 56), (6, 7, 10)], K = 2 
Salida : [(6, 9, 17, 18), (15, 34, 56), (6, 7, 10)] 
 

Método #1: Usar setdefault() + comprensión de lista 
Esta es una de las formas en que se puede resolver esta tarea. En este, realizamos la tarea de inicializar la lista y guardar elementos para comparar. Por último, la comprensión de listas se utiliza para realizar la eliminación de tuplas de subconjuntos. Este método brinda la flexibilidad del tamaño de las tuplas para su eliminación.
 

Python3

# Python3 code to demonstrate working of
# Remove Duplicate subset Tuples
# Using setdefault() + list comprehension
 
# initializing lists
test_list = [(6, 9, 17, 18), (15, 34, 56), (6, 7), (6, 9), (15, 34)]
 
# printing original list
print("The original list is : " + str(test_list))
 
# initializing K
K = 2
 
# Remove Duplicate subset Tuples
# Using setdefault() + list comprehension
temp = {}
for sub in test_list:
    temp2 = sub[:K]
    temp.setdefault(temp2, []).append(sub)
res = [sub for sub in test_list if len(sub) > K or len(temp[sub]) == 1]
 
# printing result
print("Tuple list after removal : " + str(res))
Producción : 

The original list is : [(6, 9, 17, 18), (15, 34, 56), (6, 7), (6, 9), (15, 34)]
Tuple list after removal : [(6, 9, 17, 18), (15, 34, 56), (6, 7)]

 

 
Método #2: Usar all() + any() + bucle 
La combinación de las funciones anteriores proporciona otra forma de resolver este problema. En esto, probamos todos los subconjuntos, independientemente del tamaño. La función any() se usa para verificar si alguna de las tuplas es nueva en todos los elementos de una tupla en particular extraída usando all().
 

Python3

# Python3 code to demonstrate working of
# Remove Duplicate subset Tuples
# Using all() + any()+ loop
 
# initializing lists
test_list = [(6, 9, 17, 18), (15, 34, 56), (6, 7), (6, 9), (15, 34)]
 
# printing original list
print("The original list is : " + str(test_list))
 
# Remove Duplicate subset Tuples
# Using all() + any() + loop
res = []
test_list = sorted(test_list, key = lambda x: len(x))
for idx, sub in enumerate(test_list):
    if any(all(ele in sub2 for ele in sub) for sub2 in test_list[idx + 1:]):
        pass
    else:
        res.append(sub)
 
# printing result
print("Tuple list after removal : " + str(res))
Producción : 

The original list is : [(6, 9, 17, 18), (15, 34, 56), (6, 7), (6, 9), (15, 34)]
Tuple list after removal : [(6, 9, 17, 18), (15, 34, 56), (6, 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 *