Nesta segunda fase da disciplina estudaremos, não necessariamente nessa ordem e não exclusivamente:
listas (= vetores): o tipo list, índices, referências, clones,
funções que manipulam listas com listas, funções len() e método append();
listas de listas (em particular matrizes);
- família de comandos for:
- for i in range(início,fim,passo):;
- for char in string:;
- for item in lista:.
mais sobre strings (tipo str) e floats (tipo float).
Até aqui, trabalhamos com variáveis simples, capazes de armazenar apenas um tipo, como bool, float e int.
Nessa aula introduziremos o conceito de listas (= tipo list), uma estrutura sequencial indexada muito utilizada e uma das principais estruturas básicas do Python.
- Lista: estrutura sequencial indexada
- Como criar e acessar seu conteúdo
- função append()
- função len()
- comando for elem in lista:
Uma lista (= list) em Python é uma sequência ou coleção ordenada de valores de qualquer tipo ou classe tais como int, float, bool, str e mesmo list, entre outros.
Diariamente utilizamos listas para organizar informação, como a lista de coisas a fazer, lista de compras, lista de filmes em cartaz etc.
Existem várias maneiras de criarmos uma lista. A maneira mais simples é envolver os elementos da lista por colchetes ( [ e ]). Podemos criar a lista contendo os 5 primeiros primos da seguinte maneira:
>>> primos = [2, 3, 5, 7, 11]
Podemos criar uma lista de vários objetos:
>>> uma_lista = [11, "oi", 5.4, True]
>>> outra_lista = ["joão", "masculino", 15, 1.78, "brasileira", "solteiro"]
>>> fernanda = ["Fernanda", "Montenegro", 1929, "Central do Brasil", 1998, "Atriz", "Rio de Janeiro, RJ"]
Observe o uso de colchetes ([, ]) para marcar o início e o final da lista, e os elementos separados por vígula.
A função len() retorna o comprimento (= o número de elementos ou objetos) de uma lista:
>>> len(primos)
5
>>> len(uma_lista)
4
>>> len(outra_lista)
6
>>> len(fernanda)
7
Cada valor na lista é identificado por um índice.
Dizemos que uma lista é uma estrutura sequencial indexada pois os seus elementos podem ser acessados sequencialmente utilizando índices. O primeiro elemento da lista tem índice 0, o segundo tem índice 1, e assim por diante. Observe que, por começar pelo índice zero, o último elemento da lista primos, o número 11, tem índice 4, sendo que essa lista tem comprimento 5.
Para acessar um elemento de uma lista usamos o operador de indexação []. A expressão dentro dos colchetes especifica o índice. O índice do primeiro elemento é 0. O seguinte programa imprime os valores da lista primos:
Simule a execução desse programa e observe que a variável i recebe o valor zero que corresponde ao primeiro índice e, enquanto o índice for menor que o comprimento da lista (= len(primos)), o elemento de índice i é impresso.
Índices negativos indicarão elementos da direita para a esquerda ao invés de da esquerda para a direita.
Um erro comum em programas é a utilização de índices inválidos (= list index out of range):
A partir de qualquer lista, podemos inserir um novo elemento utilizando o método append. Por exemplo, para inserir o 13 em nossa lista de primos podemos escrever:
>>> primos.append(13)
>>> primos
[2, 3, 5, 7, 11, 13]
Nesse exemplo, o 13 foi inserido no final da lista primos. Do Python Shell, ao digitarmos o nome de uma variável, como por exemplo, primos, o Python imprimirá seu conteúdo.
Uma lista particularmente importante é a lista vazia ([]).
>>> lista = []
>>> len(lista)
0
Para a criar uma lista, adotaremos o seguinte padrão:
- crie uma lista vazia
- use append() para inserir um novo elemento
Assim, para armazenar a sequência dos inteiros 0,1,2,3,4,5 em uma lista podemos fazer o seguinte:
Como é muito comum percorrer listas, do início ao fim, para processar cada elemento, podemos utilizar o comando for das seguintes maneiras:
Nessa versão do comando for, a lista primos é percorrido do início ao fim, e a cada iteração do for a variável elem recebe um dos elementos da lista.
Outra forma comum do comando for é utilizando a função range() para criar a lista de índices da seguinte forma:
Você pode supor que a função range() retorna uma lista com os inteiros de 0 até 5, que é um a menos que o valor retornado pela função len(primos).
A função range() na verdade é bem poderosa e há outras formas de utilizá-la. Para saber mais sobre essa função, consulte a documentação da função range().
- Sobre listas;
- Sobre o comando for, leia O laço for e Mais sobre o comando for;
(exercício 1 da lista de exercícios sobre vetores).
Dados n > 0 e uma sequência com n números reais, imprimí-los na ordem inversa a da leitura.
Clique aqui para ver uma solução.
Dados dois números naturais m e n e duas sequências ordenadas com m e n números inteiros, obter uma única sequência ordenada contendo todos os elementos das sequências originais sem repetição.
Sugestão: Imagine uma situação real, por exemplo, dois fichários de uma biblioteca.
Dados um número inteiro n e uma sequência com n números reais, determinar a maior soma de um segmento da sequência (com pelo menos um elemento). Um segmento é uma subsequência de números consecutivos.
Para n == 12 e a sequência
5 -2 -2 -7 3 14 10 -3 9 -6 4 1
a soma do segmento de soma máxima é 3+14+10-3+9 = 33.
A leitura e vídeos sugeridos aqui, em geral, contém (muito?) mais tópicos do que os que vistos durante a aula. Os tópicos não vistos na aula serão cobertos em algum momento mais oportuno.
Leitura das seções:
do capítulo Listas do livro interativo Como pensar como um Cientísta da Computação.
Vídeos do curso Python para zumbis de Fernando Masanori: