Seção 6.12–6.15 — Operações, strings e listas aninhadas
Podemos percorrer uma lista de forma a verificar o menor e o maior valor (Listagem 6.33). Utilizamos um pequeno truque, inicializando o máximo com o valor do primeiro elemento. Precisamos de um valor para máximo antes de utilizá-lo na comparação com if. Se usássemos 0, não teríamos problema, desde que nossa lista não tenha valores negativos.
Altere o programa da listagem 6.33 de forma a imprimir o menor elemento da lista.
A lista de temperaturas de Mons, na Bélgica, foi armazenada na lista T = [-10, -8, 0, 1, 2.5, -2, -4]. Faça um programa que imprima a menor e a maior temperatura, assim como a temperatura média.
Vejamos uma situação na qual temos que selecionar os elementos de uma lista de forma a copiá-los para duas listas. Para simplificar o problema, imagine que os valores estejam inicialmente na lista V, mas que devem ser copiados para P se forem pares, ou para I se forem ímpares (Listagem 6.34):
Vejamos agora um programa que controla a utilização das salas de um cinema. Imagine que a lista salas = [10,2,1,3,0] contenha o número de lugares vagos nas salas 1, 2, 3, 4 e 5, respectivamente. Esse programa lerá o número da sala e a quantidade de lugares solicitados. Ele deve informar se é possível vender o número de bilhetes, atualizará o número de lugares livres e caso seja possível vender, digitar 0 encerra o programa (Listagem 6.35):
💡 Note que usamos enumerate para imprimir a utilização das salas, combinando índice e valor em um único for. O índice x começa em 0, por isso usamos x+1 para exibir o número da sala corretamente.
No capítulo 3 vimos que strings podem ser indexadas ou acessadas letra por letra. Listas em Python funcionam da mesma forma, permitindo o acesso a vários valores e se tornando uma das principais estruturas de programação da linguagem. Vejamos outro exemplo de listas, mas utilizando strings, na Listagem 6.36:
O programa da Listagem 6.37 lê e imprime uma lista de compras até que seja digitado "fim":
Um fator interessante é que podemos acessar as strings dentro da lista, letra por letra, usando um segundo índice. Vejamos as Listagens 6.38 e 6.39:
Isso nos leva a outra vantagem das listas em Python: listas dentro de listas. Como bônus, temos também que os elementos de uma lista não precisam ser do mesmo tipo. Vejamos um exemplo onde teríamos uma lista de compras na Listagem 6.40. O primeiro elemento seria o nome do produto; o segundo, a quantidade; e o terceiro, seu preço.
Assim, produto1, produto2, produto3 seriam três listas com três elementos cada uma. Observe que o primeiro elemento é do tipo string; o segundo, do tipo inteiro; e o terceiro, do tipo ponto flutuante (float)! Vejamos agora outra lista na Listagem 6.41:
Agora temos uma lista chamada compras, também com três elementos, mas cada elemento é uma lista à parte. Para imprimir essa lista, teríamos o programa da Listagem 6.42:
Da mesma forma, poderíamos ter acessado o preço do segundo elemento com compras[1][2]. Vejamos agora um programa completo, capaz de perguntar nome do produto, quantidade e preço e, no final, imprimir uma lista de compras completa (Listagem 6.43):
💡 Listas dentro de listas são chamadas de listas aninhadas ou matrizes. Elas são fundamentais para representar tabelas, grades, imagens e muitas outras estruturas de dados bidimensionais em programas reais.