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:
def ultimos(arg):
""" lista dos últimos..."""
ult = []
for lista in arg:
ult.append(lista[-1])
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:
def ultimos_comp(arg):
""" Lista dos últimos."""
return [ lista[-1] for lista in arg]
A sintaxe da formulação mais simples das listas por compreensão é a seguinte:
[ 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!
def ultimos_comp_impares(arg):
""" Lista dos últimos."""
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!
def escala_cinzentos(imagem):
""" Converte um imagem para a escala de cinzentos."""
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