Python: extrae elementos pares en tupla mixta anidada

A veces, mientras trabajamos con tuplas de Python, podemos tener un problema en el que necesitamos obtener todos los elementos pares de la tupla. Las tuplas se pueden anidar o mezclar. Este tipo de problema puede ocurrir en dominios de datos. Analicemos ciertas formas en que se puede realizar esta tarea.

Entrada : test_tuple = (5, (7, 6, (2, (4, )))) 
Salida : ((6, (2, (4, ))), )

Entrada : test_tuple = (5, (8, 6, (2, (4, 8)))) 
Salida : ((8, 6, (2, (4, 8))), ) 
 

Método #1: Usar recursión + isinstance() + bucle 
Esta es una de las formas en que se puede realizar esta tarea. En esto, realizamos la tarea de hacer que la instancia del elemento sea un número entero usando isinstance(), y la función se repite una vez que se encuentra la tupla.

Python3

# Python3 code to demonstrate working of
# Extract Even elements in Nested Mixed Tuple
# Using recursion + isinstance() + loop
 
# helper_fnc
def even_ele(test_tuple, even_fnc):
    res = tuple()
    for ele in test_tuple:
        if isinstance(ele, tuple):
            res += (even_ele(ele, even_fnc), )
        elif even_fnc(ele):
            res += (ele, )
    return res
 
# initializing tuples
test_tuple = (4, 5, (7, 6, (2, 4)), 6, 8)
 
# printing original tuple
print("The original tuple : " + str(test_tuple))
 
# Extract Even elements in Nested Mixed Tuple
# Using recursion + isinstance() + loop
res = even_ele(test_tuple, lambda x: x % 2 == 0)
 
# printing result
print("Even elements of tuple : " + str(res))
Producción : 

The original tuple : (4, 5, (7, 6, (2, 4)), 6, 8)
Even elements of tuple : (4, (6, (2, 4)), 6, 8)

 

Método n.º 2: uso de recursión + isinstance() + generador de expresión 
Este método realiza esta tarea de manera similar al método anterior. La diferencia es solo que es una abreviatura del método anterior, hace el trabajo en una línea usando la expresión del generador.

Python3

# Python3 code to demonstrate working of
# Extract Even elements in Nested Mixed Tuple
# Using recursion + isinstance() + generator expression
 
# helper_fnc
def even_ele(test_tuple, even_fnc):
    return tuple(even_ele(ele, even_fnc) if isinstance(ele, tuple) else ele
    for ele in test_tuple if isinstance(ele, tuple) or even_fnc(ele))
 
# initializing tuples
test_tuple = (4, 5, (7, 6, (2, 4)), 6, 8)
 
# printing original tuple
print("The original tuple : " + str(test_tuple))
 
# Extract Even elements in Nested Mixed Tuple
# Using recursion + isinstance() + generator expression
res = even_ele(test_tuple, lambda x: x % 2 == 0)
 
# printing result
print("Even elements of tuple : " + str(res))
Producción : 

The original tuple : (4, 5, (7, 6, (2, 4)), 6, 8)
Even elements of tuple : (4, (6, (2, 4)), 6, 8)

 

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 *