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))
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))
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