Python: aplanar tuplas anidadas

A veces, mientras trabajamos con tuplas de Python, podemos tener un problema en el que necesitamos realizar un aplanamiento de tuplas, que pueden estar anidadas y no deseadas. Esto puede tener aplicación en muchos dominios, como la ciencia de datos y el desarrollo web. Vamos a discutir cierta forma en que se puede realizar esta tarea.

Input : test_tuple = ((4, 7), ((4, 5), ((6, 7), (7, 6))))
Output : ((4, 7), (4, 5), (6, 7), (7, 6))

Input : test_tuple = ((4, 7), (5, 7), (1, 3))
Output : ((4, 7), (5, 7), (1, 3))

Método:recursion + isinstance()
El uso de la combinación de las funcionalidades anteriores puede ayudarnos a lograr una solución a este problema. En esto, usamos la recursividad para realizar la tarea de profundizar en cada tupla en busca de tuplas internas, y para la decisión de aplanamiento, se usa isinstance() según el contenedor de tupla o los datos primitivos.

Python3

# Python3 code to demonstrate working of 
# Flatten Nested Tuples
# Using recursion + isinstance()
  
# helper function
def flatten(test_tuple):
      
    if isinstance(test_tuple, tuple) and len(test_tuple) == 2 and not isinstance(test_tuple[0], tuple):
        res = [test_tuple]
        return tuple(res)
  
    res = []
    for sub in test_tuple:
        res += flatten(sub)
    return tuple(res)
  
# initializing tuple
test_tuple = ((4, 5), ((4, 7), (8, 9), (10, 11)), (((9, 10), (3, 4))))
  
# printing original tuple
print("The original tuple : " + str(test_tuple))
  
# Flatten Nested Tuples
# Using recursion + isinstance()
res = flatten(test_tuple)
  
# printing result 
print("The flattened tuple : " + str(res)) 
Producción :

The original tuple : ((4, 5), ((4, 7), (8, 9), (10, 11)), ((9, 10), (3, 4)))
The flattened tuple : ((4, 5), (4, 7), (8, 9), (10, 11), (9, 10), (3, 4))

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 *