Dada una lista de tuplas, la tarea es escribir un programa en Python para restringir la frecuencia del primer elemento de los valores de tuplas como máximo a K.
Ejemplos:
Entrada: test_list = [(2, 3), (3, 3), (1, 4), (2, 4), (2, 5), (3, 4), (1, 4), (3, 4), (4, 7)], K = 2
Salida: [(2, 3), (3, 3), (1, 4), (2, 4), (3, 4), (1, 4), (4, 7)]
Explicación: 2 aparece 2 veces en la lista de resultados, (2, 5), se omite la tercera aparición.
Entrada: test_list = [(2, 3), (3, 3), (1, 4), (2, 4), (2, 5), (3, 4), (1, 4), (3, 4), (4, 7)], K = 3
Salida: [(2, 3), (3, 3), (1, 4), (4, 7)]
Explicación: 2, 3, 1, 4 restringidos a su 1ra aparición.
Método 1: usar bucle + teclas() + declaraciones condicionales
En esto, realizamos la tarea de memorizar el conteo de cada elemento de la primera posición de las tuplas y omitimos si sus ocurrencias aumentan K.
Python3
# Python3 code to demonstrate working of # Restrict Tuples by frequency of first element's value # Using loop + keys() + conditional statements # initializing list test_list = [(2, 3), (3, 3), (1, 4), (2, 4), (2, 5), (3, 4), (1, 4), (3, 4), (4, 7)] # printing original list print("The original list is : " + str(test_list)) # initializing K K = 2 res = [] mem = dict() for sub in test_list: # check in memory if sub[0] not in mem.keys(): mem[sub[0]] = 1 else: mem[sub[0]] += 1 # add if less than K frequency if mem[sub[0]] <= K: res.append(sub) # printing result print("Filtered tuples : " + str(res))
Producción:
La lista original es: [(2, 3), (3, 3), (1, 4), (2, 4), (2, 5), (3, 4), (1, 4), (3 , 4), (4, 7)]
Tuplas filtradas: [(2, 3), (3, 3), (1, 4), (2, 4), (3, 4), (1, 4), (4, 7)]
Método #2: Usando defaultdict() + filter() + lambda
En esto, realizamos la tarea de memorizar usando defaultdict() y filter() y las funciones lambda se usan para la tarea de verificar y agregar al resultado al cumplir la condición.
Python3
# Python3 code to demonstrate working of # Restrict Tuples by frequency of first element's value # Using defaultdict() + filter() + lambda from collections import defaultdict # initializing list test_list = [(2, 3), (3, 3), (1, 4), (2, 4), (2, 5), (3, 4), (1, 4), (3, 4), (4, 7)] # printing original list print("The original list is : " + str(test_list)) # initializing K K = 2 mem = defaultdict(list) # filtering result using filter() and lambda function res = list(filter(lambda sub: mem[sub[0]].append( sub[0]) or len(mem[sub[0]]) <= K, test_list)) # printing result print("Filtered tuples : " + str(res))
Producción:
La lista original es: [(2, 3), (3, 3), (1, 4), (2, 4), (2, 5), (3, 4), (1, 4), (3 , 4), (4, 7)]
Tuplas filtradas: [(2, 3), (3, 3), (1, 4), (2, 4), (3, 4), (1, 4), (4, 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