Introdução

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).

Listas

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.

Tópicos

  • Lista: estrutura sequencial indexada
  • Como criar e acessar seu conteúdo
  • função append()
  • função len()
  • comando for elem in lista:

Listas

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.

Comprimento de uma lista

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

Índices

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:

(exemplo_percorrer_lista_com_while)



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.

(indices_negativos)



Um erro comum em programas é a utilização de índices inválidos (= list index out of range):

(indice_invalido_0)



(indice_invalido_1)



append() e a lista vazia

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:

(insere_primos)

Comando for

Como é muito comum percorrer listas, do início ao fim, para processar cada elemento, podemos utilizar o comando for das seguintes maneiras:

(exemplo_percorrer_lista_com_for_elem)



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:

(exemplo_percorrer_lista_com_for_range)



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().

Para saber mais

Exercícios

Exercício 9.1

(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.

(aula09_ex91_tentativa)



Clique aqui para ver uma solução.

Exercício 9.2

Dada uma sequência de n > 0 números reais, imprimi-los eliminando as repetições.

(aula09_ex92_tentativa)



Exercício 9.3

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.

(aula09_ex93_tentativa)



Exercício 9.4

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.

(aula09_ex94_tentativa)



Leitura e vídeos complementares

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: