Python: restringe las tuplas por frecuencia del valor del primer elemento

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *