logo

Aplanar lista en Python

Una introducción

A Lista Se considera una de las estructuras de datos más flexibles en el lenguaje de programación Python. Por otro lado, una lista bidimensional, o lista 2D, que generalmente se denomina lista de listas, es un objeto de una lista donde cada elemento es una lista en sí misma. Por ejemplo: [[19, 18, 17], [16, 15, 14], [13, 12, 11]].

Aplanar una lista de listas es un proceso de transformar una lista bidimensional en una lista unidimensional desanidando cada elemento de la lista guardado en la lista de listas, es decir, transformando [[9, 8, 7], [6 , 5, 4], [3, 2, 1]] a [9, 8, 7, 6, 5, 4, 3, 2, 1].

Podemos realizar el proceso de aplanamiento con la ayuda del anidado. para bucles, recursividad, listas por comprensión, funciones principales o importación de bibliotecas o paquetes en Python sobre la profundidad y regularidad de las listas anidadas.

En este tutorial, trabajaremos en varios métodos para aplanar las listas anidadas utilizando el lenguaje de programación Python. Pero antes de comenzar, comprendamos los tipos de listas anidadas.

¿Cuáles son los tipos de listas anidadas?

Como la conocemos, Pitón es un lenguaje de programación débilmente tipado. Por tanto, podemos encontrarnos con dos tipos de Lista de Listas. Estas Lista de Listas o Listas Anidadas son las siguientes:

  1. Lista regular de listas
  2. Lista irregular de listas

Lista regular de listas

Cada elemento de la Lista Regular de listas se denomina Sublista, observando así la uniformidad del tipo de elemento. Por ejemplo: [[9, 8, 7], [6, 5, 4], [3, 2, 1]] es una lista normal de listas como [9, 8, 7], [6, 5, 4] , [3, 2, 1] es del tipo lista.

Lista irregular de listas

matriz de cadenas en lenguaje c

Cada elemento de la Lista irregular de listas se denomina sublista o elemento que no pertenece a la lista (por ejemplo, una cadena o un número entero). Por tanto, existe una irregularidad en cuanto al tipo de elemento. Por ejemplo: [[9, 8, 7], [6, 5], 4, 3] es una lista irregular de listas ya que [9, 8, 7] y [6, 5] son ​​del tipo lista, mientras que 4 y 3 son del tipo int.

Aplanar la lista de listas usando bucles for anidados

Aplanando la lista de listas con las anidadas para La ayuda de Loops se considera un método de fuerza bruta para obtener una lista plana. Podemos realizar este método seleccionando cada elemento de la Lista bidimensional y organizándolo en una Lista unidimensional.

Consideremos el siguiente ejemplo que funciona tanto para listas de listas regulares como irregulares.

Ejemplo:

 # defining the function def flattenlist(_2dlist): # defining an empty list flatlist = [] # Iterating through the outer list for item in _2dlist: if type(item) is list: # If the item is of the list type, iterating through the sub-list for element in item: flatlist.append(element) else: flatlist.append(item) return flatlist # defining the nested list nestedlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100]] print('Genuine List:', nestedlist) print('Converted Flat List:', flattenlist(nestedlist)) 

Producción:

 Genuine List: [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100]] Converted Flat List: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 

Explicación:

En el ejemplo anterior, hemos definido una función como lista plana que toma un parámetro como _2dlista . Luego hemos usado para bucle para iterar los elementos de la lista anidada y agregarlos para generar una lista aplanada. Luego hemos definido la lista anidada e implementamos el lista plana función. Como resultado, la lista anidada se transformó exitosamente en una lista aplanada.

Aplanar la lista anidada usando una lista por comprensión

Aplanar la lista de listas con la ayuda de una comprensión de lista se considera un enfoque elegante para obtener una lista plana dependiendo de una lista bidimensional existente. Sin embargo, este enfoque ofrece una solución menos intuitiva.

Consideremos el siguiente ejemplo.

Ejemplo:

 # defining the nested list nestedlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90]] # list comprehension flatlist = [element for sub_list in nestedlist for element in sub_list] print('Genuine list:', nestedlist) print('Converted list:', flatlist) 

Producción:

 Genuine list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] Converted list: [10, 20, 30, 40, 50, 60, 70, 80, 90] 

Explicación:

En el ejemplo anterior, hemos definido una lista anidada y una lista por comprensión. Luego los hemos impreso para los usuarios. Como resultado, la lista anidada se transformó exitosamente en una lista aplanada.

Aplanar la lista de listas usando el método recursivo

También podemos utilizar el método recursivo para aplanar la lista bidimensional. Consideremos el siguiente ejemplo que implementa el método recursivo para aplanar la lista de listas. Esta implementación funciona bien tanto para listas de listas regulares como irregulares.

Ejemplo:

 # defining a function def flattenlist(nestedlist): if len(nestedlist) == 0: return nestedlist if isinstance(nestedlist[0], list): return flattenlist(nestedlist[0]) + flattenlist(nestedlist[1:]) return nestedlist[:1] + flattenlist(nestedlist[1:]) print(flattenlist([[10, 20, 30, 40], [50, 60, 70], [80, 90], 100])) 

Producción:

 [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 

Explicación:

En el ejemplo anterior, hemos definido una función y hemos utilizado un si declaración indicando si la longitud de la lista anidada es igual a cero, luego devuelve la lista anidada.

colecciones en java

Si el elemento de datos en el índice cero es una instancia de una lista, entonces el índice de la lista vuelve a la función y se suma al siguiente índice de la lista y así sucesivamente. De lo contrario, la función devolverá los elementos y así sucesivamente. Por fin, definimos la lista anidada y ejecutamos la función. Como resultado, la lista de listas se ha aplanado de forma recursiva.

Utilizando bibliotecas de Python

También podemos utilizar algunas de las bibliotecas del lenguaje de programación Python para aplanar la lista de listas. La implementación de estas bibliotecas se describe a continuación:

Aplanar la lista de listas usando functools y bibliotecas de operadores

El operador La biblioteca proporciona la iconogato() función para realizar la operación fundamental como la concatenación. Podemos aplicar esta función de forma acumulativa a los elementos de datos de una lista anidada, de izquierda a derecha, lo que da como resultado la reducción de la lista anidada a una lista aplanada.

Consideremos el siguiente ejemplo para comprender su implementación.

Ejemplo:

 # importing the required libraries import operator import functools regularlist = [] # Converting the list of lists into a flattened one. def convo(nestedlist): for element in nestedlist: if type(element) is list: regularlist.append(element) else: regularlist.append([element]) return regularlist twoDlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100], 110] regular2Dlist = convo(twoDlist) print('Given List:', twoDlist) print('Converted list:', functools.reduce(operator.iconcat, regular2Dlist, [])) 

Producción:

 Given List: [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100], 110] Converted list: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110] 

Explicación:

En el ejemplo anterior, hemos importado el herramientas funcionales biblioteca junto con el operador biblioteca. Luego hemos definido una lista vacía como la lista regular . Luego hemos definido una función como conversar para transformar la lista de listas en una lista aplanada. En esta función hemos utilizado el para bucle donde los elementos de la lista anidada se agregan a la lista vacía que definimos anteriormente. Posteriormente hemos definido la lista anidada y ejecutamos la función. Como resultado, la lista de listas se convierte correctamente en una lista aplanada.

mapa hash de java

Aplanar la lista de listas usando la biblioteca itertools

El herramientas iterativas La biblioteca proporciona la cadena() función que nos permite transformar una lista anidada en una única lista aplanada idealmente. Esta función trata las series consecutivas como una sola serie iterándolas a través del iterable pasado como parámetro en forma serial.

Consideremos el siguiente ejemplo:

Ejemplo:

 # importing the itertools library import itertools # defining the nested list nestedlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100]] flattenlist = list(itertools.chain(*nestedlist)) print('The nested list:', nestedlist) print('The flattened list:', flattenlist 

Producción:

 The nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100]] The flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 

Explicación:

En el ejemplo anterior, hemos importado el herramientas iterativas biblioteca y generó una lista anidada. Luego hemos utilizado el cadena() Función para convertir la lista anidada dada en la lista aplanada. Por fin, hemos devuelto el resultado a los usuarios. Como resultado, la lista de listas se aplana correctamente.

Aplanar la lista de listas usando la biblioteca NumPy

El NumPy La biblioteca proporciona varias operaciones cotidianas, incluida la concatenación de matrices regulares bidimensionales en columnas o filas. Usaremos el atributo conocido como departamento para obtener un iterador unidimensional sobre la matriz para conquistar el objetivo. Consideremos el siguiente ejemplo para comprender el uso de la función concatenar y el atributo plano.

Ejemplo:

 # importing the library import numpy # defining the nested list nestedlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90]] # using the concatenate function along with the flat attribute flattenlist = list(numpy.concatenate(nestedlist).flat) print('The Nested list:', nestedlist) print('The Flattened list:', flattenlist) 

Producción:

 The Nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] The Flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90] 

Explicación:

En el ejemplo anterior, hemos importado el engordado biblioteca y definió una lista anidada. Luego hemos utilizado el concatenar función de la engordado biblioteca junto con su departamento atributo para aplanar los elementos de la lista anidada y concatenarlos en una nueva lista aplanada. Por fin, hemos impreso el resultado para los usuarios. De este modo, la lista de listas se aplana correctamente.

Utilizando funciones básicas

También podemos realizar la tarea de aplanamiento utilizando algunas funciones principales que proporciona el lenguaje de programación Python.

Aplanar la lista de listas usando la función de suma

Podemos considerar la suma de listas internas como otra solución al problema. Pasamos dos argumentos a la suma función: El primer parámetro es iterable , que es una lista anidada, y el segundo parámetro es comenzar que es una lista nula para el siguiente caso que sirve como lista plana inicial donde se agregarán los elementos de datos de las sublistas internas.

Podemos decir que este enfoque es bastante conveniente ya que no tenemos que importar nada. Sin embargo, es más lento que el herramientas iter() y cadena() funciona cuando hay una gran cantidad de sublistas presentes en la lista anidada.

Consideremos el siguiente ejemplo:

Ejemplo:

 # defining a nested list nestedlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90]] # using the sum function flattenlist = sum(nestedlist, []) print('The Nested list:', nestedlist) print('The Flattened list:', flattenlist) 

Producción:

pitón reducir
 The Nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] The Flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90] 

Explicación:

En el ejemplo anterior, hemos definido la lista anidada. Luego hemos utilizado el suma() función y aplanó la lista anidada en una lista unidimensional e imprimió la lista resultante para los usuarios. Como resultado, hemos transformado con éxito la lista de listas en una lista plana.

Aplanar la lista de listas usando la palabra clave Lambda

Podemos definir una función anónima usando la palabra clave lambda . Podemos pasar la lista regular/irregular como parámetro a esta función anónima. La evaluación de la expresión se realiza para obtener una Lista Unidimensional plana.

Consideremos el siguiente ejemplo:

Ejemplo:

 # Defining the nested list nestedlist = [[10, 20, 30], [30, 50, 60], [40, 60, 70], 70] # Using lambda parameters: expression flattenlist = lambda nestedlist:[item for element in nestedlist for item in flattenlist(element)] if type(nestedlist) is list else [nestedlist] print('The Nested list:', nestedlist) print('The Flattened List:', flattenlist(nestedlist)) 

Producción:

 The Nested list: [[10, 20, 30], [30, 50, 60], [40, 60, 70], 70] The Flattened List: [10, 20, 30, 30, 50, 60, 40, 60, 70, 70] 

Explicación:

En el ejemplo anterior, hemos definido una lista anidada. Luego hemos utilizado el lambda palabra clave junto con un argumento que define una expresión para la comprensión de la lista. Luego los hemos impreso para los usuarios. Como resultado, hemos convertido con éxito la Lista irregular bidimensional en la Lista aplanada.