Dada una lista de enteros (los elementos pueden repetirse), escriba un programa en Python para eliminar los elementos que se repiten menos de k veces.
Ejemplos:
Input : lst = ['a', 'a', 'a', 'b', 'b', 'c'], k = 2 Output : ['a', 'a', 'a', 'b', 'b'] Input : lst = [1, 1, 1, 1, 2, 2, 3, 3, 3, 4, 4], k = 3 Output : [1, 1, 1, 1, 3, 3, 3]
Enfoque n. ° 1: ingenuo pythonico
Counter()
desde collections module
construir un diccionario asignando valores a conteos y guárdelos en ‘contados’. Luego hacemos uso de ‘temp_lst’ para almacenar los elementos que deben eliminarse. Finalmente, recorremos la lista dada y agregamos todos los elementos que no están en ‘temp_lst’ a ‘res_lst’ que contiene la salida requerida.
# Python3 program to Remove elements of # list that repeated less than k times from collections import Counter def removeElements(lst, k): counted = Counter(lst) temp_lst = [] for el in counted: if counted[el] < k: temp_lst.append(el) res_lst = [] for el in lst: if el not in temp_lst: res_lst.append(el) return(res_lst) # Driver code lst = ['a', 'a', 'a', 'b', 'b', 'c'] k = 2 print(removeElements(lst, k))
['a', 'a', 'a', 'b', 'b']
Enfoque #2: Enfoque Eficiente
El enfoque eficiente para usar el método Counter es construir un valor de mapeo de diccionario para los recuentos y luego usar una lista de comprensión para filtrar los recuentos mayores que un valor especificado. Este enfoque es eficiente tanto en tiempo como en espacio.
# Python3 program to Remove elements of # list that repeated less than k times from collections import Counter def removeElements(lst, k): counted = Counter(lst) return [el for el in lst if counted[el] >= k] # Driver code lst = ['a', 'a', 'a', 'b', 'b', 'c'] k = 2 print(removeElements(lst, k))
['a', 'a', 'a', 'b', 'b']
Publicación traducida automáticamente
Artículo escrito por Smitha Dinesh Semwal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA