Uma introdução
A Lista é considerada uma das estruturas de dados mais flexíveis na linguagem de programação Python. Por outro lado, uma lista bidimensional, ou Lista 2D, que geralmente é denominada lista de listas, é um objeto de uma lista onde cada elemento é uma lista em si. Por exemplo: [[19, 18, 17], [16, 15, 14], [13, 12, 11]].
Achatar uma lista de listas é um processo de transformar uma lista bidimensional em uma lista unidimensional, desaninhando cada elemento da lista mantido na lista de listas, ou seja, transformando [[9, 8, 7], [6 , 5, 4], [3, 2, 1]] a [9, 8, 7, 6, 5, 4, 3, 2, 1].
Podemos realizar o processo de nivelamento com a ajuda do nested para loops, recursão, compreensão de lista, funções principais ou importação de bibliotecas ou pacotes no Python na profundidade e regularidade das listas aninhadas.
Neste tutorial, trabalharemos em vários métodos para nivelar as listas aninhadas usando a linguagem de programação Python. Mas antes de começarmos, vamos entender os tipos de listas aninhadas.
Quais são os tipos de listas aninhadas?
Como sabemos, Pitão é uma linguagem de programação de digitação fraca. Portanto, podemos encontrar dois tipos de Lista de Listas. Estas listas de listas ou listas aninhadas são as seguintes:
- Lista regular de listas
- Lista Irregular de Listas
Lista regular de listas
Cada item da Lista Regular de listas é denominado Sub-Lista, observando assim a uniformidade do tipo do elemento. Por exemplo: [[9, 8, 7], [6, 5, 4], [3, 2, 1]] é uma lista regular de listas como [9, 8, 7], [6, 5, 4] , [3, 2, 1] é do tipo lista.
Lista Irregular de Listas
lançar tratamento de exceções em java
Cada item na lista irregular de listas é referido como uma sublista ou um elemento não pertencente à lista (por exemplo, uma string ou um número inteiro). Assim, há uma irregularidade quanto ao tipo de elemento. Por exemplo: [[9, 8, 7], [6, 5], 4, 3] é uma lista irregular de listas, pois [9, 8, 7] e [6, 5] são dos tipos de lista, enquanto 4 e 3 são do tipo int.
Achatando a lista de listas usando loops for aninhados
Achatando a lista de listas com o aninhado para A ajuda do Loops é considerada uma abordagem de força bruta para obter uma lista simples. Podemos realizar este método selecionando cada item da Lista Bidimensional e organizando-o em uma Lista Unidimensional.
Vamos considerar o exemplo a seguir que funciona tanto para listas de listas regulares quanto para listas irregulares.
Exemplo:
# 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))
Saída:
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]
Explicação:
No exemplo acima, definimos uma função como lista plana que recebe um parâmetro como _2dlista . Usamos então para loop para iterar os elementos da lista aninhada e anexá-los para gerar uma lista nivelada. Definimos então a lista aninhada e implementamos o lista plana função. Como resultado, a lista aninhada foi transformada com sucesso na lista nivelada.
Achatando a lista aninhada usando uma compreensão de lista
Achatar a lista de listas com a ajuda de uma compreensão de lista é considerado uma abordagem elegante para obter uma lista plana dependendo de uma lista bidimensional existente. No entanto, esta abordagem oferece uma solução menos intuitiva.
Consideremos o seguinte exemplo.
Exemplo:
# 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)
Saída:
Genuine list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] Converted list: [10, 20, 30, 40, 50, 60, 70, 80, 90]
Explicação:
No exemplo acima, definimos uma lista aninhada e uma compreensão de lista. Em seguida, os imprimimos para os usuários. Como resultado, a lista aninhada foi transformada na lista nivelada com sucesso.
Achatando a lista de listas usando o método recursivo
Também podemos usar o método recursivo para nivelar a lista bidimensional. Vamos considerar o exemplo a seguir implementando o método recursivo para nivelar a lista de listas. Esta implementação funciona bem para listas de listas regulares e irregulares.
Exemplo:
# 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]))
Saída:
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
Explicação:
No exemplo acima, definimos uma função e usamos um se declaração informando se o comprimento da lista aninhada é igual a zero e, em seguida, retorne a lista aninhada.
coleções em java
Se o elemento de dados no índice zero for uma instância de uma lista, então o índice da lista entra na função novamente e é adicionado ao índice seguinte da lista e assim por diante. Caso contrário, a função retornará os elementos e assim por diante. Por fim, definimos a lista aninhada e executamos a função. Como resultado, a lista de listas foi achatada recursivamente.
Utilizando Bibliotecas de Python
Também podemos utilizar algumas das bibliotecas da linguagem de programação Python para nivelar a lista de listas. A implementação dessas bibliotecas é descrita abaixo:
Achatando a lista de listas usando functools e bibliotecas de operadores
O operador biblioteca fornece o ícone gato() função para realizar a operação fundamental como concatenação. Podemos aplicar esta função cumulativamente aos elementos de dados de uma lista aninhada, da esquerda para a direita, resultando na redução da lista aninhada para uma lista achatada.
Vamos considerar o exemplo a seguir para entender sua implementação.
Exemplo:
# 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, []))
Saída:
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]
Explicação:
No exemplo acima, importamos o ferramentas funcionais biblioteca junto com o operador biblioteca. Definimos então uma lista vazia como o lista regular . Definimos então uma função como conversa para transformar a lista de listas em uma lista nivelada. Nesta função, usamos o para loop onde os elementos da lista aninhada são anexados à lista vazia que definimos anteriormente. Posteriormente definimos a lista aninhada e executamos a função. Como resultado, a lista de listas é convertida com sucesso em uma lista nivelada.
Achatando a lista de listas usando a biblioteca itertools
O ferramentas iterativas biblioteca fornece o corrente() função que nos permite transformar uma lista aninhada em uma única lista nivelada, idealmente. Esta função trata séries consecutivas como uma única série, iterando-as por meio do iterável passado como parâmetro de forma serial.
método de substring java
Consideremos o seguinte exemplo:
Exemplo:
# 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
Saída:
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]
Explicação:
No exemplo acima, importamos o ferramentas iterativas biblioteca e gerou uma lista aninhada. Usamos então o corrente() função para converter a lista aninhada fornecida na lista nivelada. Por fim, devolvemos o resultado aos usuários. Como resultado, a lista de listas foi nivelada com sucesso.
Achatando a lista de listas usando a biblioteca NumPy
O NumPy A biblioteca fornece várias operações diárias, incluindo a concatenação de matrizes regulares bidimensionais em colunas ou linhas. Usaremos o atributo conhecido como plano para obter um Iterador Unidimensional sobre o array para conquistar o alvo. Vamos considerar o exemplo a seguir para entender o uso da função concatenar e do atributo flat.
Exemplo:
# 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)
Saída:
The Nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] The Flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90]
Explicação:
No exemplo acima, importamos o entorpecido biblioteca e definiu uma lista aninhada. Usamos então o concatenar função do entorpecido biblioteca junto com seu plano atributo para nivelar os elementos da lista aninhada e concatená-los em uma nova lista nivelada. Por fim, imprimimos o resultado para os usuários. Assim, a lista de listas é nivelada com sucesso.
Utilizando funções essenciais
Também podemos realizar a tarefa de nivelamento utilizando algumas funções básicas fornecidas pela linguagem de programação Python.
Achatando a lista de listas usando a função sum
Podemos considerar a soma de listas internas como outra solução para o problema. Passamos dois argumentos para o soma função: O primeiro parâmetro é iterável , que é uma lista aninhada, e o segundo parâmetro é começar que é uma lista nula para o caso a seguir que serve como a lista simples inicial onde os elementos de dados das sublistas internas serão adicionados.
Podemos dizer que esta abordagem é bastante conveniente, pois não precisamos importar nada. Contudo, é mais lento que o itertools() e corrente() funciona quando há um grande número de sublistas presentes na lista aninhada.
Consideremos o seguinte exemplo:
Exemplo:
# 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)
Saída:
The Nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] The Flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90]
Explicação:
No exemplo acima, definimos a lista aninhada. Usamos então o soma() função e nivelou a lista aninhada em uma lista unidimensional e imprimiu a lista resultante para os usuários. Como resultado, transformamos a lista de listas em uma lista simples com sucesso.
Achatando a lista de listas usando a palavra-chave Lambda
Podemos definir uma função anônima usando a palavra-chave lambda . Podemos passar a lista regular/irregular como parâmetro para esta função anônima. A avaliação da expressão é feita de forma a obter uma Lista Unidimensional plana.
Consideremos o seguinte exemplo:
Exemplo:
idade de Salman Khan
# 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))
Saída:
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]
Explicação:
No exemplo acima, definimos uma lista aninhada. Usamos então o lambda palavra-chave junto com um argumento que define uma expressão para compreensão da lista. Em seguida, os imprimimos para os usuários. Como resultado, convertemos com sucesso a lista irregular bidimensional na lista achatada.