15.12.2022 Views

Python Eficaz

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

contendo outras listas) em uma lista unidimensional com todas as células. É

possível fazê-lo com abrangências de lista, bastando incluir duas expressões for.

Essas expressões rodam na ordem em que aparecem, da esquerda para a direita:

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

flat = [x for row in matrix for x in row]

print(flat)

>>>

[1, 2, 3, 4, 5, 6, 7, 8, 9]

O exemplo acima é simples, legível e um uso razoável de laços múltiplos. Outro

uso razoável de laços aninhados é replicar o leiaute em dois níveis da lista de

entrada. Por exemplo, digamos que se queira elevar ao quadrado o valor de cada

célula em uma matriz bidimensional. Essa expressão é menos legível por causa

dos caracteres [] extras, mas ainda assim é fácil de ler.

squared = [[x**2 for x in row] for row in matrix]

print(squared)

>>>

[[1, 4, 9], [16, 25, 36], [49, 64, 81]]

Se a expressão incluir outro laço, a abrangência de lista seria tão grande que

seria preciso dividi-la em mais de uma linha.

my_lists = [

[[1, 2, 3], [4, 5, 6]],

# ...

]

flat = [x for sublist1 in my_lists

for sublist2 in sublist1

for x in sublist2]

Neste ponto, as abrangências possuem várias linhas e, portanto, não são mais

curtas que as alternativas. Entretanto, consigo produzir o mesmo resultado

usando comandos de laço comuns. A indentação dessa versão faz com que os

laços sejam mais claros que nas abrangências de lista.

flat = []

for sublist1 in my_lists:

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!