Olá! Vamos agora aprender conceito muito importante computação que tem a ver com umas estruturas de dados pouco mais complexas. Até ao momento os nossos dados eram apenas variáveis isoladas, com valores isolados mas muitas vezes, computação, o que nós queremos ter são listas de objetos. Essas listas são uma forma de nós guardarmos uma coleção de objetos. Uma coleção de números, uma coleção de palavras, futuramente a gente vai até ver como fazer coleções de coleções, listas de listas, não é? E quando é que a gente poderia querer usar listas de valores, coleções de valores? Por exemplo, vamos supor que você quer fazer programa que vai ler do teclado os dados com a temperatura que fez durante todos os dias de determinado mês, não é, e depois fazer alguma análise estatística sobre essas temperaturas, a temperatura média, a temperatura máxima, a temperatura mínima, desvio padrão e coisas do gênero. Jeito de fazer isso seria ter variáveis, por exemplo de t, t1, t2, t3 assim por diante até t31, não é, porque o mês pode ter 31 dias e a gente armazenar dados nessas 31 variáveis e fazer contas com essas 31 variáveis. Mas note que isso aí ficaria gigante no nosso programa, não é, imagina calcular média de 31 valores, tinha que ter uma linha enorme ali somando e depois dividindo por 31, não é jeito bom de lidar com isso. Então quando nós temos uma grande coleção, uma grande lista de elementos é bom a gente usar esse outro conceito. Python a gente chama isso de listas. Tem outras linguagens de programação que chama esse conceito de array, isso é o nome inglês. A gente pode dizer também que é vetor, vetor de dados, que é conjunto linear, assim unidimensional de dados, onde eu poderia guardar coisas do tipo, vamos supor se forem temperaturas: 25, 24.3, 28, hoje o dia aqui está pouco frio, devem estar uns 14,5 graus, mais ou menos. Então, conjunto assim de muitos graus muitas temperaturas numa lista. Então como é que a gente poderia fazer isso na linguagem Python? É muito simples. Vamos supor que eu quero fazer uma, guardar uma playlist, vamos supor que eu gosto de música, o que é uma verdade, e eu quero definir uma playlist_do_fabio. Deixa eu limpar isso aqui pouco. Quero uma playlist_do_fabio como que nós poderíamos definir, uma playlist é uma lista de músicas que o Fábio gosta. Parte eu poderia fazer algo deste tipo. Primeiro, para dizer que é uma lista eu coloco esse caractere de colchetes e, depois as minhas músicas aqui vão ser uma lista de strings, estão a minha playlist, a música que eu gosto mais, essa 'Round Midnight' depois separados por vírgulas, os outros elementos. Eu gosto bastante também de 'Podres Poderes', mais separado por vírgula, novamente, eu gosto do 'Journey to the center of the Earth' e eu gosto também de 'As rosas não falam'. E daí, como terminei a lista aqui eu vou colocar fecha colchetes para indicar que eu terminei a lista, está? Então essa é a forma de, Python, eu definir uma lista de elementos. Essa aqui foi uma lista onde cada elemento é string. Eu poderia ter outro tipo de lista, por exemplo, uma lista chamada lis que teria números dentro dela, então por exemplo aqui é outro exemplo de uma lista onde eu tenho números dentro dela. Vamos agora copiar isso aqui para o IDLE para a gente brincar pouco com esta lista aqui. Então eu vou copiar aqui, abrir o IDLE e daqui no shell loader eu posso digitar isso aqui. Eu esqueci, está vendo, ele já mostrou que ele pintou de verde, deu para perceber que eu esqueci de abrir aspas aqui. Abre aspas no 'Journey to the Center of the Earth', agora pintou certo de verde, parece que está tudo certo. Então, vou corrigir aqui para não se a gente usar de novo ficar certo, então faltou abrir aspas aqui, pronto. Agora eu tenho essa playlist do Fábio, particular, se eu perguntar qual o valor aqui da playlist do Fábio, ele vai imprimir playlist do Fábio, essa lista onde eu tenho 1, 2, 3, 4 elementos, nesse caso são 4 strings dentro dessa lista. Deixa eu pegar aqui esse outro exemplo. O lis, né? Copiar aqui também, nesse caso, o lis eu tenho 1, 2, 3, 4, 5 elementos dentro dessa lista. A primeira coisa que a gente pode fazer com listas, é saber como pegar cada elemento isoladamente dessa lista. Então, o 'Round Midnight' aqui tem 4 elementos, eu posso falar, qual é o valor do primeiro elemento, do segundo elemento? Só que tem uma pequena pegadinha aqui, ciência da computação, é muito comum quando a gente faz uma contagem, a gente começar a contar do 0 e não começar a contar do 1. Então, a playlist do Fábio aqui, ´'Round Midnight' é o que está na posição 0, o 'Podres Poderes' é o que está na posição 1, 'Journey to the centre of the Earth', posição 2 e as 'Rosas' posição 3. Então de 0 a 3, são 4 elementos, se você pensar aqui, se você for contar como cientista da computação, o cientista da computação vai contar 0, 1, 2, 3, 4, então eu tenho 5 dedos e os dedos são indexados de 0 até 4 e é assim que funcionam as listas. Então, eu posso falar, na playlist do Fábio, qual é o elemento que está na posição 0? E o jeito de eu falar isso, é isso aqui, usar essa anotação, abrir colchetes, 0 fecha colchetes e ele vai dizer, é o 'Round Midnight' que está lá na posição 0. Depois nós temos o que está na posição 1 que é o 'Podres poderes', o que está na posição 2 é o 'Journey to the Center of the Earth', o que está na posição 3, que é o quarto elemento né, é 'As rosas não falam'. Daí, pode fazer outras brincadeiras, por exemplo, o que é que está na posição 4? Fala " são 4 elementos, o que é que tenho na posição 4?" Opa, deu uma mensagem de erro, que mensagem de erro ele deu? O importante é isso aqui "list index out of range" ou seja, o índice da lista que eu tentei usar, que é o 4, ele está fora ali do limite do que seria aceitável, como a lista tem 4 elementos, os elementos são de 0 até 3. Tem uma outra coisa interessante, isso é raramente utilizado mas é bom a gente saber. Se eu colocar número negativo, se eu colocar o que está na posição menos 1 da lista, algumas linguagens dariam de novo essa mensagem list index out of range, mas o que acontece Python é pouco diferente, se você coloca números negativos ele vai do final da lista para o começo, então o menos 1 ele pega qual é o primeiro elemento no final da lista, daí ele diz que são 'As rosas não falam'. Se eu fizer o playlist_do_fabio o que é que está na posição menos 2, ele vai dizer o segundo elemento do final para o começo da lista que nesse caso é o 'Journey to the center of the Earth'. Mas é raro a gente usar índices negativos a gente vai quase sempre usar índices positivos, a gente tem que lembrar que o índice vai estar entre 0 e o comprimento da lista menos 1. Vamos fazer, pegar outro exemplo aqui. Vamos supor que eu quero uma lista para guardar os números primos, porque eu quero fazer alguma conta com números primos. Então, vamos primeiro abrir aquele programa que eu fiz da última vez, numa das aulas passadas de números primos, está aqui o programa. Eu fiz uma pequena modificação: a gente tinha feito aquela função éPrimo, que dado número ele diz se o número é primo ou não, eu fiz uma pequena modificação que, eu pergunto aqui para o usuário digitar limite, que seria o limite máximo e daí ele imprime todo os números até o limite máximo, então se eu digitar 1000, ele vai imprimir aqui, ele vai indo fazer, n vai de 2 até 1000 e se o n é primo ele imprime o número, caso contrário ele não imprime. Então desse jeito aqui, ele vai imprimir todos os números primos até 1000. Então vamos ver se funciona isso mesmo. Então se eu disser que o limite máximo é 1000, ele aqui vai calculando e ele imprimi todos os números primos até 1000, você vê que tem muitos números primos entre dois e 1000. Mas vamos supor que a gente quer guardar aqui uma lista chamada primos, eu vou guardar todos os primos menores do que 100. Então termino aqui no 97, eu vou copiar isso, pronto. Pronto, agora temos uma lista, vetor primos que contém aí todos os números primos menores do que 100. Se eu quero saber quantos números primos existem menores do que 100, eu posso usar uma função, comando aí que existe Python, que é o comando len, de lenght, comprimento inglês, lenght. Se eu der o len, e aqui ele já apareceu escrito aqui embaixo, deixa eu, pronto. Se eu digitar aqui len, olha, len ele devolve o número de itens de determinado contêiner uma lista, por exemplo. Se eu colocar aqui primos, ele vai dizer quantos elementos tem nessa lista primos, e tem 25, então eu sei que tem 25 números primos entre dois e 100. Outra coisa que a gente pode fazer, a gente pode ter listas onde cada elemento da lista é de tipo diferente de objeto. Então por exemplo, eu poderia ter uma lista de filmes. Uma lista de filmes não. Filme, objeto do tipo filme e eu posso representar ele uma lista onde eu tenho vários elementos e cada elemento tem tipo diferente. Então por exemplo, vamos supor que o primeiro item desta minha lista é o título do filme. Então nesse caso, O que é isso companheiro. Então esse aqui seria o título do filme no primeiro item da lista. No segundo item da lista eu posso ter por exemplo quem é o diretor do filme, Bruno Barreto. No terceiro item da lista, então eu tenho dois string, no terceiro item da lista eu posso ter a duração horas do filme. Esse é filme que tem a duração de 1.83 horas e depois eu posso ter, por exemplo, o ano que esse filme foi produzido, ou lançado e daí pronto, eu tenho a minha lista aqui. Essa minha lista filme ela tem dois, três, quatro elementos diferentes e note que os dois primeiros elementos são strings. Já esses dois últimos aqui são números, particular, se eu posso perguntar aqui, qual que é o primeiro elemento dessa lista? Então o primeiro elemento é: o que é isso companheiro. Eu posso perguntar qual que é o tipo, qual que é o tipo do primeiro elemento da lista? Aí ele vai lhe dizer que o tipo é da classe string, da classe string porque é string. Qual que é o tipo do elemento? Também é string, os dois primeiros são strings. E do elemento dois? É float, é número ponto flutuante, 1.83, é número fracionário, número ponto flutuante. Já qual que é o tipo do elemento três? É número inteiro, 1997 é número inteiro. Então você vê que uma lista Python, linguagem Python a gente pode ter diferentes tipos cada elemento da lista. Alguns casos isso é útil e outros casos vai ser mais comum ter elementos sempre do mesmo tipo. Você tem essas duas opções. Mas vamos então ver algumas manipulações, algumas funções que a gente pode utilizar com listas. Vamos voltar aqui para aquela lista da minha playlist, então é uma lista que tem quatro músicas, e daí eu lembrei que não tem nenhuma música dos Beatles aqui, e eu adoro os Beatles, então eu quero acrescentar uma nova música nessa minha playlist. Como é que eu posso fazer isso? É muito simples. As listas têm uma função que é append Então se eu escrever aqui Playlist do Fábio ponto append, eu posso acrescentar como apêndice, concatenar ao final da lista novo elemento nessa minha lista. Então eu vou acrescentar aqui o Strawberry Fields Forever, que eu adoro. Strawberry Fields Forever, dos Beatles, e pronto. Agora minha playlist inclui o Strawberry Fields Forever. Então agora ele tem cinco elementos, se eu perguntar o comprimento, ele vai dizer que tem cinco elementos. E os elementos são de zero até quatro. Então vamos ver outro exemplo, vamos supor que eu quero uma lista dos cartões amarelos determinado jogo de futebol, e à medida que o jogo vai correndo, eu vou colocando o nome dos jogadores que receberam cartão amarelo. Eu quero inicializar essa lista com uma lista vazia, então jeito de fazer isso Python é isso aqui, abre e fecha colchetes. Então se eu perguntar qual que é o comprimento dessa lista cartões amarelos, comprimento dá zero, a lista vazia tem comprimento zero. E à medida que o jogo vai caminhando, eu posso querer, vamos supor que o Luís Fabiano no primeiro minuto de jogo, ele já recebe cartão amarelo, porque ele é pouco esquentadinho, daí eu faço assim, attend Luís Fabiano e eu quero dizer também que foi no primeiro minuto de jogo. Então eu primeiro eu coloco o nome do jogador, e depois eu coloco o minuto, então nesse momento, se eu perguntar aqui, cartões amarelos, eu tenho que o Luís Fabiano, no primeiro minuto de jogo, recebeu cartão amarelo. Daí vamos supor que, já no segundo tempo, o Neymar Júnior recebe cartão amarelo, todo mundo fica preocupado, e eu vou dizer que foi lá no segundo tempo, eu vou usar aquela anotação europeia, eu vou dizer que no minuto 78 do jogo ele recebeu. Então aqui a gente no qual, como que está o nosso, nossa lista, Luís Fabiano no primeiro minuto de jogo, Neymar no minuto 78 do jogo recebeu cartão amarelo. Então a gente viu que listas podem guardar objetos de tipos diferentes e a gente vai poder armazenar e manipular esses valores. Então recapitulando o que vimos, as listas são uma forma de guardar conjunto de valores, uma coleção de objetos uma única estrutura de dados, uma única variável. A gente pode acessar os elementos de uma lista usando essa anotação aqui de colocar o nome da lista, abre colchetes, o índice, abre colchetes, o índice, e fecha colchetes, ele vai dar exatamente o elemento que está naquela posição. Uma outra coisa que a gente pode fazer é atribuir valor para uma determinada posição da lista, a gente pode fazer isso também. Então por exemplo, eu me enganei, não foi no minuto 78, foi no minuto 79, daí é muito simples eu mudar isso, eu posso fazer cartões amarelos e daí que posição é essa, é a zero, dois, três, então eu falo que na posição três eu quero que você armazene 79. Então cartões amarelos de três recebe 79. Se eu fizer isso, eu tenho aqui, mudou para 79. Então eu posso ler uma coisa que está armazenada na lista, eu posso armazenar uma coisa na lista, eu posso perguntar qual é o comprimento de uma lista, eu posso perguntar qual o comprimento, eu posso concatenar ao final da lista novo elemento, usando o append, então colocar apêndice nessa lista, elemento no final da lista. E tem aquela possibilidade de eu definir uma lista vazia. Então se eu fizer s recebe, isso aqui, uma lista vazia, o s está como uma lista vazia, depois eu posso fazer append nessa lista, eu posso colocar lá o número 100, por exemplo, e depois então na posição, se eu fizer aqui na posição zero eu já tenho o elemento 100, daí eu posso fazer algo do tipo s[0] recebe s[0] mais 1. Então eu estou pegando o elemento que está na posição zero somando 1 e guardando de novo na posição zero. Se eu fizer isso, eu vou ter a lista com 101. Então isso aqui são algumas manipulações que a gente pode fazer com lista. Vou deixar de lição de casa exercício para vocês. Faça programa que vai lendo do teclado uma sequência de números inteiros terminadas por zero e quando o usuário digita o zero, ele imprimi essa sequência na ordem inversa. Na ordem ao contrário da ordem que o usuário digitou. O único jeito de implementar isso é usando uma lista, então, por favor, tentem fazer isso. [MÚSICA] [MÚSICA] [MÚSICA]