Python: eliminar columnas de elementos duplicados

Dada una Array, escriba un programa de Python para eliminar toda la columna si se produce un duplicado en cualquier fila.

Ejemplos:

Entrada : test_list = [[4, 3, 5, 2, 3], [6, 4, 2, 1, 1], [4, 3, 9, 3, 9], [5, 4, 3, 2, 1]] 
Salida : [[4, 3, 5], [6, 4, 2], [4, 3, 9], [5, 4, 3]] 
Explicación : 1 tiene duplicado como siguiente elemento, por lo tanto, la quinta columna es remoto. 3 aparece como 2.º y 4.º índice, por lo que se elimina el 4.º índice.

Entrada : test_list = [[6, 4, 2, 1, 1], [4, 3, 9, 3, 9], [5, 4, 3, 2, 1]] 
Salida : [[6, 4, 2 ], [4, 3, 9], [5, 4, 3]] 
Explicación : 1 tiene un duplicado como siguiente elemento, por lo que se elimina la quinta columna. 3 aparece como 2.º y 4.º índice, por lo que se elimina el 4.º índice. 
 

Enfoque: Uso de comprensión de listas + set() + chain.from_iterable() + generador + bucle

En esto, los índices que son elementos duplicados se extraen como primer paso usando la función de generador y set(). En el segundo paso, todas las columnas requeridas se excluyen durante la reconstrucción de Matrix.

Python3

# Python3 code to demonstrate working of
# Remove Columns of Duplicate Elements
# Using list comprehension + set() + 
# chain.from_iterable() + generator + loop
from itertools import chain
  
  
def dup_idx(sub):
  
    memo = set()
    for idx, ele in enumerate(sub):
  
        # adding element if not there
        if ele not in memo:
            memo.add(ele)
        else:
  
            # return index is Duplicate
            yield idx
  
  
# initializing list
test_list = [[4, 3, 5, 2, 3], [6, 4, 2, 1, 1],
             [4, 3, 9, 3, 9], [5, 4, 3, 2, 1]]
  
# printing original list
print("The original list is : " + str(test_list))
  
# initializing K
K = 3
  
# passing each row to generator function
# flattening indices at end
temp_idxs = set(chain.from_iterable(dup_idx(sub) for sub in test_list))
  
# extracting columns with only non-duplicate indices values
res = [[ele for idx, ele in enumerate(
    sub) if idx not in temp_idxs] for sub in test_list]
  
# printing result
print("The filtered Matrix : " + str(res))

Producción:

La lista original es: [[4, 3, 5, 2, 3], [6, 4, 2, 1, 1], [4, 3, 9, 3, 9], [5, 4, 3, 2 , 1]]
La array filtrada: [[4, 3, 5], [6, 4, 2], [4, 3, 9], [5, 4, 3]]

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 *