Introdução — Aulas de Introdução à Computação com Python: Edição Interativa
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()
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:
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)
>>> len(uma_lista)
>>> len(outra_lista)
>>> len(fernanda)
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:
primos = [2, 3, 5, 7, 11] i = 0 while i < len(primos): print( "elemento de indice %d = %d"%(i, primos[i]) ) i = i + 1
(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.
numeros = [17, 123, 87, 34, 66, 8398, 44] print("%3d: %d" %(2,numeros[2])) print("%3d: %d" %(5,numeros[-5])) print("%3d: %d" %(9-8,numeros[9-8])) print("%3d: %d" %(-2,numeros[-2])) print("%3d: %d" %(len(numeros)-1,numeros[len(numeros)-1])) print("%3d: %d" %(-7,numeros[-7]))
(indices_negativos)
Um erro comum em programas é a utilização de índices inválidos (= list index out of range):
numeros = [17, 123, 87, 34, 66, 8398, 44] print("%3d: %d" %(len(numeros),numeros[len(numeros)])) # indice invalido
(indice_invalido_0)
numeros = [17, 123, 87, 34, 66, 8398, 44] print("3d: %d" %(-8,numeros[-8])) # indice invalido
(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)
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 ([]).
Para a criar uma lista, adotaremos o seguinte padrão:
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:
primos = [2, 3, 5, 7, 11, 13] for elem in primos: print( elem )
(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:
primos = [2, 3, 5, 7, 11, 13] for i in range(len(primos)): print( "%d: %d"%(i,primos[i]) )
(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¶
Sobre listas;
Sobre o comando for , leia O laço for e Mais sobre o comando for;
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.
def main(): # escreva o seu programa abaixo e remova o print() print("Vixe! Ainda nao fiz o exercicio!") main()
(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.