A conversão de uma matriz 2D em uma matriz 1D é chamada de nivelamento. Existem muitas abordagens para resolver o problema.
Vamos explorar alguns deles neste tutorial.
Vejamos um exemplo.
Entrada
[[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
Resultado
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
últimas postagens
#1. rotações
A maneira mais comum de resolver o problema é usando loops. Acho que a maioria de vocês já entendeu. Vamos ver os passos para resolver o problema usando loops.
- Inicialize a lista de listas com dados fictícios e nomeie-os como dados.
- Agora, inicialize uma lista vazia chamada flat_list.
- Iterar sobre os dados.
- Descompacte todos os elementos da lista atual.
- Adicione-os à flat_list usando o método list append.
- Imprima o resultado.
Veja o código do problema abaixo.
# initializing the data and an empty list data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]] flat_list = [] # iterating over the data for item in data: # appending elements to the flat_list flat_list += item # printing the resultantn flat_list print(flat_list)
Você pode usar outro loop para adicionar elementos de sublista a flat_list em vez de um operador de concatenação. Também podemos usar compreensões de lista em vez de loops.
Ambos fazem o mesmo trabalho. Vamos ver a próxima maneira de resolver o problema.
#2. Itertools – Cadeia
Usaremos um método chamado chain do módulo integrado itertools.
A cadeia de métodos itera sobre cada sublista e retorna os elementos até que não haja sublistas nela. Ele retorna um iterável que temos que converter em uma lista.
Vamos ver as etapas envolvidas na solução do problema.
- Inicialize a lista de listas com dados fictícios e nomeie-os como dados.
- Obtenha o iterável nivelado usando itertools.chain(*data).
- Converta o iterável resultante em uma lista.
- Imprima a lista achatada.
Você pode passar pelo código no trecho abaixo.
# importing the module import itertools # initializing the data data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]] # flattening the list and storing the result flat_list = itertools.chain(*data) # converting iterable to list and printing print(list(flat_list))
#3. Achatar listas de vários níveis
Vimos como achatar uma lista de listas. Os métodos acima que discutimos para nivelar a lista não funcionarão para listas de vários níveis. Vejamos um exemplo.
Entrada
[1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]
Resultado
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Como não sabemos a profundidade das listas antes do programa, temos que usar a recursão para resolver o problema.
- Inicialize os dados conforme mostrado no exemplo e nomeie-os como dados.
- Inicialize uma lista vazia chamada flat_list.
- Escreva uma função chamada flatten_list.
- Iterar sobre os elementos da lista dada.
- Se o elemento for uma lista, chame recursivamente a mesma função novamente.
- Se o elemento não for uma lista, anexe o elemento à flat_list.
- Invoque a função com dados.
- A função preencherá todos os elementos na lista flat_list.
- Imprima a flat_list para verificar a saída.
Ufa! muitas etapas para codificar. Não se preocupe. A conversão das instruções acima em código não levará mais do que minutos.
# initializing the data and empty list data = [1, [2, 3, [4, 5]], 6, [[7], [8, 9]]] flat_list = [] # function def flatten_list(data): # iterating over the data for element in data: # checking for list if type(element) == list: # calling the same function with current element as new argument flatten_list(element) else: flat_list.append(element) # flattening the given list flatten_list(data) # printing the flat_list print(flat_list)
Lembre-se, não convertemos a lista existente. Em vez disso, criamos uma nova lista com o elemento de lista fornecido.
Conclusão
Espero que você tenha gostado do tutorial. Pode haver muitas outras maneiras de nivelar uma lista em Python, mas acho que as acima são provavelmente as mais fáceis.
Codificação feliz 🙂