Suponhamos que temos uma lista de listas e que queremos formar uma nova lista, contendo o último elemento de cada uma das listas que fazem parte da lista inicial. Um modo de resolver seria:
1.
def
ultimos(arg):
2.
""" lista dos últimos..."""
3.
ult
=
[]
4.
for
lista
in
arg:
5.
ult.append(lista[
-
1
])
6.
return
ult
Percorremos a lista elemento a elemento. De cada um deles obtemos o seu último elemento e acrescentamos a um contentor (outra lista) que antes do ciclo criámos como lista vazia.
Usando agora listas por compreensão para resolver o mesmo problema:
1.
def
ultimos_comp(arg):
2.
""" Lista dos últimos."""
3.
return
[ lista[
-
1
]
for
lista
in
arg]
A sintaxe da formulação mais simples das listas por compreensão é a seguinte:
1.
[ elemento
for
elemento
in
objecto]
Mas suponhamos, por exemplo, que no exemplo anterior apenas queremos os últimos elementos, caso sejam ímpares? Como fazer? Acrescenta-se um if!
1.
def
ultimos_comp_impares(arg):
2.
""" Lista dos últimos."""
3.
return
[ lista[
-
1
]
for
lista
in
arg
if
(lista[
-
1
]
%
2
)
=
=
1
]
Admitamos que a nossa lista de listas representa uma imagem. Cada um dos seus elementos é um tuplo com três elementos entre 0 e 255. Como podemos obter a passagem da imagem para uma outra em que apenas mantemos o valor do canal vermelho e os outros dois ficam a 0? Usamos dois ciclos for!
1.
def
escala_cinzentos(imagem):
2.
""" Converte um imagem para a escala de cinzentos."""
3.
return
[ [ (coluna[
0
],
0
,
0
)
for
coluna
in
linha]
for
linha
in
imagem]
Notar que manter a estrutura da matriz, o ciclo mais à esquerda está envolto entre [ e ].
Como se pode ver é possível fazer muitas coisas com listas por compreensão. sempre que tiver uma oportunidade, use-as!
Sem comentários:
Enviar um comentário