Python | Convertir una lista anidada en una lista plana

En este artículo, cubriremos cómo aplanar una lista de listas en python. Para convertir una lista anidada en una lista plana vamos a ver algunos ejemplos.

Ejemplo:

Entrada: l = [1, 2, [3, 4, [5, 6] ], 7, 8, [9, [10] ] ]
Salida: l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Entrada: l = [[[‘elemento1’, ‘elemento2’]], [[‘elemento3’, ‘elemento4’]]] 

Salida: l = [‘artículo1’, ‘artículo2’, ‘artículo3, ‘artículo4”]

¿Qué son las listas anidadas?

Una lista dentro de una lista (o una lista dentro de otra lista anidada). La tarea es convertir una lista anidada en una sola lista en python, es decir, no importa cuántos niveles de anidamiento haya en la lista de python, todos los anidados deben ser eliminado para convertirlo en uno que contenga todos los valores de todas las listas dentro de los corchetes más externos pero sin corchetes adentro. 

En este artículo, cubriremos 5 enfoques diferentes para aplanar una lista de listas.

  • Usar un bucle anidado
  • Usando una lista de comprensión
  • usando la recursividad
  • Usando un módulo NumPy
  • Usando un método sum() incorporado de Python

Ejemplo 1: Convierta una lista anidada en una lista plana usando Nested for Loops

En este ejemplo, veremos que primero estamos iterando la lista externa y luego, si hay una sublista, estamos iterando la sublista usando for loop . Después de eso, agregamos el elemento en nuestra nueva lista «flatList» que nos da una lista plana de 1 dimensión.

Python3

def flat(lis):
    flatList = []
    # Iterate with outer list
    for element in lis:
        if type(element) is list:
            # Check if type is list than iterate through the sublist
            for item in element:
                flatList.append(item)
        else:
            flatList.append(element)
    return flatList
 
 
lis = [[11, 22, 33, 44], [55, 66, 77], [88, 99, 100]]
print('List', lis)
print('Flat List', flat(lis))

Producción:

List [[11, 22, 33, 44], [55, 66, 77], [88, 99, 100]]
Flat List [11, 22, 33, 44, 55, 66, 77, 88, 99, 100]

Ejemplo 2: Uso de una lista de comprensión

En este ejemplo, usaremos la comprensión de lista para iterar la lista primero, y luego iteraremos la sublista usando el bucle for. Después de eso, agregamos el elemento en nuestra nueva lista «flatList» usando una comprensión de lista que nos da una lista plana de 1 dimensión.

Python3

# Original list
lis = [[11, 22, 33, 44], [55, 66, 77], [88, 99, 100]]
 
# iterate through the sublist using List comprehension
flatList = [element for innerList in lis for element in innerList]
 
# printing original list
print('List', lis)
# printing flat list
print('Flat List', flatList)

Producción:

List [[11, 22, 33, 44], [55, 66, 77], [88, 99, 100]]
Flat List [11, 22, 33, 44, 55, 66, 77, 88, 99, 100]

Ejemplo 3: Uso de la recursividad

En este ejemplo, estamos usando el método de recursión para aplanar una lista anidada con múltiples niveles de anidamiento.

Python3

# input list
l = [1, 2, [3, 4, [5, 6]], 7, 8, [9, [10]]]
 
# output list
output = []
 
# function used for removing nested
# lists in python using recursion
def reemovNestings(l):
    for i in l:
        if type(i) == list:
            reemovNestings(i)
        else:
            output.append(i)
 
 
# Driver code
print('The original list: ', l)
reemovNestings(l)
print('The list after removing nesting: ', output)
Producción:

The original list:  [1, 2, [3, 4, [5, 6]], 7, 8, [9, [10]]]
The list after removing nesting:  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Ejemplo 4: Uso del módulo Pandas

En este ejemplo, estamos usando un módulo pandas, los pandas tienen un método llamado np.concatenate que nos ayuda a aplanar una lista anidada. 

Python3

import numpy as np
 
lst = [[11, 33], [22, 55], [11], [77, 88]]
 
new = list(np.concatenate(lst))
 
print(new)

Producción:

[11, 33, 22, 55, 11, 77, 88]

Ejemplo 5: Uso del método sum() integrado de Python

En este ejemplo, estamos usando un método sum() integrado de python que nos dará una lista plana.

Python3

lis = [[11, 22, 33, 44], [55, 66, 77], [88, 99]]
 
flatList = sum(lis, [])
 
print('New list', flatList)

Producción:

New list [11, 22, 33, 44, 55, 66, 77, 88, 99]

Ejemplo 6: Uso del módulo de funciones de Python

El módulo functools ofrece formas de usar y extender otras funciones y objetos invocables sin tener que reescribirlos por completo.

Python3

import functools
import operator
 
# Original list
lis = [[11, 22, 33, 44], [55, 66, 77], [88, 99, 100]]
 
flatList = functools.reduce(operator.iconcat, lis, [])
 
# printing original list
print('List', lis)
# printing flat list
print('Flat List', flatList)

Producción:

List [[11, 22, 33, 44], [55, 66, 77], [88, 99, 100]]
Flat List [11, 22, 33, 44, 55, 66, 77, 88, 99, 100]

Ejemplo 7: Uso del módulo itertools de Python

Itertool de Python es un módulo que proporciona varias funciones que funcionan en iteradores para producir iteradores complejos.

Python3

import itertools
 
# Original list
lis = [[11, 22, 33, 44], [55, 66, 77], [88, 99, 100]]
 
flatList = list(itertools.chain(*lis))
 
print("Original List:", lis)
print("Flattened List:", flatList)

Producción:

List [[11, 22, 33, 44], [55, 66, 77], [88, 99, 100]]
Flat List [11, 22, 33, 44, 55, 66, 77, 88, 99, 100]

Publicación traducida automáticamente

Artículo escrito por DharmendraChoudhary 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 *