Como prometido, hoje vamos continuar o post de ontem, falando sobre listas em Python, pois este é uma assunto bastante extenso.
O assunto de hoje é List Comprehension, ou em português, abrangência de listas. Como o termo em português não retrata bem o que este recurso faz, vamos usar o termo em inglês mesmo.
List Comprehension é um recurso do Python que permite a criação de listas de forma simples, usando simplesmente uma expressão seguida de um for que pode conter outros for e/ou if dentro dele.
Tudo ficará mais claro ao partirmos para os exemplos.
Então, vamos colocar a mão na massa! Abra o shell do Python.
Lembre-seque o que deve ser digitado estará precedido de >>> ou ..., assim como aparecerá no shell do python.
Se por acaso você não entendeu do que estou falando, é aconselhável que você leia antes os posts anteriores que te deixarão em dia com tudo que vimos até agora.
Procure entender exatamente o que acontece em cada exemplo. Vamos lá!
>>> l = [1, 2, 4]>>> [3 * x for x in l][3, 6, 12] >>> [2 * x for x in l if x > 3][12]>>> 5 * x for x in l if x < 0][]>>> [[x, 2*x] for x in l][[1, 2], [2, 4], [4, 8]]>>> [(x, 2*x) for x in l][(1, 2), (2, 4), (4, 8)]>>> l1 = [0, 1, 2]>>> l2 = [1, 2, 3]>>> [x * y for x in l1 for y in l2][0, 0, 0, 1, 2, 3, 2, 4, 6]>>> [l1[i] * l2[i] for i in range(len(l1))][0, 2, 6]
As instruções são sempre dadas no mesmo padrão:
[<expressao> for <variável> in <lista> [if <condição>] [for...]]*** As estruturas entre [] são opcionais. ***
Agora chegamos ao ponto em que devemos responder o desafio de ontem para prosseguir.
No último post, ficou um desafio: "Quem imagina como fazer uma matriz em Python usando o que vimos hoje???"
A resposta é: Criar listas de listas!
Então, se fizermos:
>>> m = [[1, 2, 3],[2, 3, 4]]
Teremos a matriz m com 2 linhas e 3 colunas, contendo na primeira linha os valores 1, 2, 3 e na segunda os valores 2, 3 e 4.
Assim, podemo usar list comprehention também para criarmos matrizes. Chamamos este recurso de Nested List Comprehention (nested = aninhado).
Vejamos o seguinte exemplo:
>>> m = [... [1, 2, 3],... [4, 5, 6],... [7, 8, 9],... ]
Aqui, criamos uma matriz 3x3 com os valores de 1 a 9.
Agora, veja uma forma de trocar as linhas com as colunas da matriz m:
>>> [[linha[i] for linha in m] for i in [0, 1, 2]][[1, 4, 7], [2, 5, 8], [3, 6, 9]]
Acho que por hoje, este recurso está bem ilustrado. Qualquer dúvida, postem nos comentários que a resposta será rápida!
Comentem!
Assinem o Feed e não percam nenhum Post do Programe em Python!
Abraços!
Até a Próxima!

Este ultimo comando, não consegui entender oq ela faz!
ResponderExcluir>>> [[linha[i] for linha in m] for i in [0, 1, 2]]
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
Inicilmente m valia [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ResponderExcluirE a execussão deste comando retornou [[1, 4, 7], [2, 5, 8], [3, 6, 9]] que é a matriz inversa de m.
Faça o seguinte:
Decomponha o comando. Você já tem m da forma q foi criada acima, certo.
Então, decompondo, ficaria assim:
x = []
for i in [0, 1, 2]:
y = []
for linha in m:
y.append(linha[i])
x.append(y)
no final, x terá a mesma lista [[1, 4, 7], [2, 5, 8], [3, 6, 9]].
Analise o que estes 'for' estão fazendo... qualquer coisa faça um teste de mesa pra ajudar. Se mesmo assim, não entender, fique à vontade pra perguntar novamente.
Obrigado pelo comentário!
x = []
ResponderExcluirfor i in [0, 1, 2]:
----y = []
----for linha in m:
--------y.append(linha[i])
----x.append(y)
Com idenação...
Muito obrigado pela resposta, consegui compreender muito bem.
ResponderExcluirE parabéns pelo post.
Eu que agradeço pela participação e fico feliz por ter compreendido a idéia :D.
ResponderExcluirAbraços!
Julio, como eu faria para trocar as linhas de uma matriz, entre si?
ResponderExcluirOlá!
ResponderExcluirBom, pra trocar a linha x de uma matriz mat com a linha y, faça assim:
mat[x], mat[y] = mat[y], mat[x]
e as linhas serão trocadas...
Espero que tenha respondido.
Abraço!