Python Listas e Strings Prof. Paulo Henrique Ribeiro Gabriel (Com base no material do Prof. André Backes) Listas Por que usar listas? Listas As variáveis declaradas até agora são capazes de armazenar um único valor por vez. Sempre que tentamos armazenar um novo valor dentro de uma variável, o valor antigo é sobrescrito e, portanto, perdido A lista é a forma mais familiar de dados estruturados Basicamente, uma lista é uma sequência de elementos, onde cada elemento é identificado por um índice Diferente dos arrays usados em outras linguagens, em Python os elementos de uma lista podem possuir qualquer tipo Listas - Problema Listas - Solução Imagine o seguinte problema leia as notas de uma turma de cinco estudantes e depois imprima as notas que são maiores do que a média da turma Um algoritmo para esse problema poderia ser o mostrado a seguir
Listas Listas O algoritmo anterior apresenta uma solução possível para o problema apresentado Porém, essa solução é inviável para grandes quantidades de alunos Imagine se tivéssemos de processar os dados de 00 alunos Para 00 alunos, precisamos de: Uma variável para armazenar a nota de cada aluno: 00 variáveis Um comando de leitura para cada nota: 00 input() Um somatório de 00 notas Um comando de teste para cada aluno: 00 comandos if Um comando de impressão na tela para cada aluno: 00 print() Listas - Definição Listas - declaração As variáveis têm relação entre si todas armazenam notas de alunos Podemos declará-las usando um ÚNICO nome para todos os 00 alunos notas = conjunto de 00 números acessados por um índice isso é uma lista! Existem várias maneiras de criar uma lista Uma das mais simples é definir os elementos da lista entre colchetes Os elementos da lista devem ser separados por vírgulas Se nenhum elemento for definido, temos uma lista vazia Também podemos usar a função range() para gerar uma lista de valores 0... 99 notas Listas - declaração Lista = variável Em uma lista, os elementos são acessados especificando o índice desejado entre colchetes. A numeração começa sempre do zero Isto significa que uma lista de 4 elementos terá índices de 0 a 3: compras[0], compras[], compras[2] e compras[3] A função len() retorna o número de elementos da lista Cada elemento da lista tem todas as características de uma variável e pode aparecer em expressões e atribuições (respeitando os seus tipos) notas[2] = x + notas[3] if notas[3] > 60: Ex: somar todos os elementos de uma lista 0 2 3 Miojo Ovo Leite Pão compras 2
Percorrendo uma lista Percorrendo uma lista Podemos usar um comando de repetição (preferencialmente o for) para percorrer a lista de 2 formas Forma Percorrer os índices e elementos Podemos usar um comando de repetição (preferencialmente o for) para percorrer a lista de 2 formas Forma 2 Percorrer apenas os elementos. Isso evita manipular explicitamente o índice Exemplo Exemplo Listas - Problema Listas - Solução Voltando ao problema anterior leia as notas de uma turma de cinco estudantes e depois imprima as notas que são maiores do que a média da turma Um algoritmo para esse problema usando listas: Listas - Solução Exercício Se ao invés de 5, fossem 00 alunos?: Exercício Para uma lista contendo 5 números inteiros, formular um algoritmo que determine o maior elemento desta lista 3
Exercício - solução Exercício Para uma lista contendo 5 números inteiros, formular um algoritmo que determine o maior elemento desta lista As listas suportam acesso a sub-listas, isto é, a certos conjuntos de índices lista[i:j] seleciona a sub-lista dos índices i até j- lista[i:] seleciona a sub-lista dos índice i até o final lista[:j] seleciona a sub-lista do início até o índice j- lista[i:j:k] seleciona a sub-lista dos índices i até j-, indo de k em k i, i+k, i+2k,..., j- Selecionando sub-listas de elementos Listas são objetos mutáveis Podemos acessar qualquer elemento ou sequência de elementos e modificálos Os elementos de uma lista podem possuir qualquer tipo Concatenação e repetição de listas Podemos também associar o valor de cada posição da lista a uma variável sem precisar especificar os índices usando o recurso de unpacking Basta definir uma lista de variáveis, entre colchetes, que receberá o conteúdo da lista Podemos unir/concatenar duas listas para formar uma nova usando o operador de + Podemos criar uma lista a partir da repetição de outra usando o operador de * 4
Removendo elementos da lista Copiando uma lista Podemos remover um ou mais elementos de uma lista de duas maneiras Usando o operador del Atribuindo uma lista vazia àquela posição A operação de atribuição não cria uma cópia do objeto! Em Python, listas são objetos. Se atribuirmos uma lista a outra, ambas irão se referir ao mesmo objeto lista lista 33 4 6-2 378972 Copiando uma lista Copiando uma lista Para copiar uma lista, o correto é utilizar [:] na operação de atribuição lista 33 4 6-2 3699860 A operação de atribuição não cria uma cópia do objeto! Em Python, listas são objetos. Se atribuirmos uma lista a outra, ambas irão se referir ao mesmo objeto lista 33 4 6-2 374572 Procurando um elemento na lista Métodos sobre listas O operador in permite verificar se um determinado elemento está presente ou não em uma lista Uma lista é uma classe e, portanto, possui diversos métodos já definidos Um dos jeitos mais simples de manipular listas é utilizar os métodos que já fazem parte dela Esses métodos permitem executar diversas tarefas Ordenação, inserção, remoção, etc Esses métodos modificam o conteúdo original da lista 5
Métodos sobre listas Métodos sobre listas Forma geral de uso dos métodos lista.nome-método() Alguns métodos sort(): ordena os elementos da lista append(x): insere um elemento x no final da lista insert(pos,x): insere um elemento x na posição pos remove(x): remove o elemento x da lista pop(pos): remove e retorna o elemento da posição pos Exemplos Lista aninhadas Lista aninhadas Uma lista pode armazenar qualquer tipo de dado As listas podem inclusive conter outras listas Podemos assim representar tabelas ou matrizes 0 0... 49 99 Para criar uma lista aninhada, basta definir cada elemento como uma nova lista Os elementos são acessados especificando um par de colchetes e índice para cada dimensão da lista A numeração começa sempre do zero 0 0 oi 2 3... 4 5 6 mat[0][] 99 2 7 8 9 Lista aninhadas Lista aninhadas Podemos também incluir novas linhas e colunas em cada lista Recomenda-se, neste caso, usar os métodos ao invés do operador de concatenação Nas listas aninhadas, não é necessários que as linhas tenham sempre o mesmo número de colunas Podemos remover um ou mais elementos de uma lista aninhada de maneira similar as listas tradicionais índice: a linha inteira é removida 2 índices: o elemento da linha e coluna é removido 6
Lista aninhadas Todas as operações feitas em listas aninhadas devem considerar o fato de que temos agora uma lista dentro de outra Strings Definição Definição Cadeia de caracteres ou String Sequência de caracteres adjacentes na memória Permite representar palavras ou frases dentro do computador Em outras palavras, strings são listas. A diferença é que cada posição da lista contém um único caractere Na inicialização de uma string podemos usar aspas duplas ou aspas simples O tipo de uma string é a classe str Definição Podemos utilizar 3 aspas simples na inicialização de uma string. Neste caso, será possível criar uma string contendo mais de uma linha As quebras de linha também serão armazenadas dentro da string. Podemos tratar uma string como uma entidade única Mas também podemos acessar seus caracteres individualmente usando colchetes e o índice da posição 0 2 3 4 5 P y t h o n 7
Tamanho da string A função len() retorna o tamanho de uma string Neste caso, a função retornará 6, que é o número de caracteres na palavra Não podemos acessar um índice da string que seja maior ou igual ao tamanho da string Os índices dos caracteres de uma string sempre começam em ZERO e vão até TAMANHO- 0 2 3 4 5 P y t h o n 0 2 3 4 5 P y t h o n Podemos utilizar índices negativos para acessar os caracteres de uma string Neste caso, a contagem começa do último caractere da string 0 2 3 4 5 P y t h o n -6-5 -4-3 -2 - Como nas listas, as strings também suportam acesso a sub-strings ou sub-cadeias de caracteres texto[i:j] seleciona a sub-cadeia dos índices i até j- texto[i:] seleciona a sub-cadeia dos índice i até o final texto[:j] seleciona a sub-cadeia do início até o índice j- texto[i:j:k] seleciona a sub-cadeia dos índices i até j-, indo de k em k i, i+k, i+2k,..., j- Percorrer uma string Selecionando sub-strings ou sub-cadeias de caracteres Podemos percorrer uma string de duas formas Usando um ciclo sobre os índices Usando um ciclo sobre a sequência 8
Concatenação de string Concatenação de string Podemos unir/concatenar duas string para formar uma nova de duas maneiras Usando o operador de soma + Separando as strings por vírgula no momento da impressão (um espaço será automaticamente inserido entre elas) Podemos acessar os caracteres individualmente de uma string, mas não podemos modificá-los Felizmente, podemos construir uma outra string via concatenação Sequências de escape Sequências de escape Também chamados de códigos de barra invertida Permitem o envio de caracteres de controle não gráficos para dispositivos de saída As sequências de escape são executas sempre que uma barra invertida é encontrada Para evitar que as sequências de escape funcionem, basta definir a string como uma Raw String Para isto basta preceder a string com r ou R Código Comando \n nova linha \t tabulação \v tabulação vertical \b retrocesso \ aspas simples \ aspas duplas \\ barra invertida Formatação de strings Formatação de strings Também é possível realizar a formatação de string utilizando o operado % Forma geral string-a-ser-formatada % (lista-de-valores) Todo conteúdo da string da esquerda precedido por um % é substituído por um valor a direita (entre parênteses) Na string da esquerda, o conjunto de caracteres depois do % define o tipo de formatação a ser executada Código Tipo de formatação %c caractere %s string %d inteiro %u inteiro sem sinal %f reais (ponto flutuante) %.Nf reais com N casas decimais %% símbolo de % 9
Manipulando strings Manipulando strings Podemos procurar uma string menor dentro de uma string maior Ex: palavra dentro de uma frase Para isso, basta utilizar o operador in. Forma geral string in string2 O resultado será True se a string existir dentro da string2, e False, caso contrário Procurando uma string menor dentro de uma string maior No caso, as string devem estar escritas exatamente iguais Exemplos Manipulando strings Manipulando strings Também podemos utilizar os operadores relacionais (==,!=, <, <=, >, >=) para comparar duas string A comparação é feita usando a ordem lexicográfica (i.e. ordem do dicionário) Nas comparações, letras maiúsculas e minúsculas são consideradas diferentes Exemplos Exemplo Manipulando strings Métodos sobre strings Essa diferença entre maiúsculas e minúsculas ocorre pois a comparação é feita pelos códigos numéricos dos caracteres Função ord(): código numérico de um caractere Função chr(): caractere de um código numérico Uma string é uma classe e, portanto, possui diversos métodos já definidos Um dos jeitos mais simples de manipular strings é utilizar os métodos que já fazem parte da string Esses métodos permitem executar diversas tarefas Conversão maiúsculo/minúsculo, localizar e substituir substrings, etc Esses métodos nunca modificam o conteúdo original 0
Métodos sobre strings Métodos sobre strings Forma geral de uso dos métodos Objeto-string.nome-método() Alguns métodos lower(): converte para minúsculo upper(): converte para maiúsculo replace(c,c2): troca os caracteres c por c2 strip(): remove espaços do início e fim split(): separa uma string por espaços e devolve uma lista de strings split(ch): separa uma string usando o caractere ch e devolve uma lista de strings Exemplos