Python – Frecuencia de elementos en tupla anidada mixta

A veces, mientras trabajamos con datos de Python, podemos tener un problema en el que tenemos datos en forma anidada y no anidada dentro de una sola tupla, y deseamos contar la frecuencia del elemento en ellos. Este tipo de problema puede presentarse en dominios como el desarrollo web y la ciencia de datos. Analicemos ciertas formas en que se puede realizar esta tarea.

Entrada : test_tuple = (5, (6, (7, 8, 6))) Salida : {5: 1, 6: 2, 7: 1, 8: 1} Entrada : test_tuple = (5, 6, 7, 8 ) Salida : {5: 1, 6: 1, 7: 1, 8: 1}

Método #1: Usar recursividad + bucle La solución de este problema involucró dos pasos. En primer lugar, realizamos el aplanamiento de la tupla mediante recursividad y luego el conteo se realiza en forma de fuerza bruta mediante bucle. 

Python3

# Python3 code to demonstrate working of
# Elements Frequency in Mixed Nested Tuple
# Using recursion + loop
 
# helper_fnc
def flatten(test_tuple):
    for tup in test_tuple:
        if isinstance(tup, tuple):
            yield from flatten(tup)
        else:
            yield tup
 
# initializing tuple
test_tuple = (5, 6, (5, 6), 7, (8, 9), 9)
 
# printing original tuple
print("The original tuple : " + str(test_tuple))
 
# Elements Frequency in Mixed Nested Tuple
# Using recursion + loop
res = {}
for ele in flatten(test_tuple):
    if ele not in res:
        res[ele] = 0
    res[ele] += 1
 
# printing result
print("The elements frequency : " + str(res))
Producción : 

The original tuple : (5, 6, (5, 6), 7, (8, 9), 9)
The elements frequency : {5: 2, 6: 2, 7: 1, 8: 1, 9: 2}

  Método #2: Usar Counter() + recursividad Esta es otra forma en la que se puede resolver este problema. En esto, empleamos Counter() para realizar la tarea de contar elementos. 

Python3

# Python3 code to demonstrate working of
# Elements Frequency in Mixed Nested Tuple
# Using recursion + Counter()
from collections import Counter
 
# helper_fnc
def flatten(test_tuple):
    for tup in test_tuple:
        if isinstance(tup, tuple):
            yield from flatten(tup)
        else:
            yield tup
 
# initializing tuple
test_tuple = (5, 6, (5, 6), 7, (8, 9), 9)
 
# printing original tuple
print("The original tuple : " + str(test_tuple))
 
# Elements Frequency in Mixed Nested Tuple
# Using recursion + Counter()
res = dict(Counter(flatten(test_tuple)))
 
# printing result
print("The elements frequency : " + str(res))
Producción : 

The original tuple : (5, 6, (5, 6), 7, (8, 9), 9)
The elements frequency : {5: 2, 6: 2, 7: 1, 8: 1, 9: 2}

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 *