Um guia para nivelar listas e listas de listas em Python

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]

#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.

  12 Tema de currículo do WordPress para criar a melhor impressão

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.

  Diferenças [+4 Tools to Check]

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.
  Qual deles você deve usar?

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 🙂