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