Manipulação de Listas. Vanessa Braganholo

Documentos relacionados
TCC 00308: Programação de Computadores I Manipulação de listas

Listas e Tuplas. Vanessa Braganholo

Vetores. Vanessa Braganholo

Python: Listas. Claudio Esperança

Manipulação de Strings. Vanessa Braganholo

Manipulação de Strings. Vanessa Braganholo

Computação 1 - Python Aula 6 - Teórica: Listas 1/ 28

Matrizes. Vanessa Braganholo

VETORES. Lista de Exercícios Vetores Prof: Yuri Frota

Algoritmos e Estrutura de Dados Aula 02 Listas em Python

Algoritmo e Programação Matemática LAÇOS E LISTAS

PYTHON LISTAS. Introdução à Programação SI1

Aplicações de Dicionários. Prof. Alberto Costa Neto Programação em Python

Organização de programas em Python. Vanessa Braganholo

Estruturas de Repetição. Vanessa Braganholo

Listas, conjuntos e dicionários

Computação 1 - Python Aula 10 - Teórica: Estrutura de Dados - Dicionário. João Carlos, Carla Delgado, Ana Luisa Duboc 1/ 18

Listas: Sequências Mutáveis

Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler

Computação 1 - Python Aula 4 - Teórica Variáveis e Atribuição, Strings. João Carlos, Carla Delgado, Ana Luisa Duboc 1/ 30

MCG126 Programação de Computadores II

ESTRUTURA DE DADOS LISTAS LINEARES

24/09/2014. Prof. André Backes

Python Listas e Strings. Listas 23/11/2016. Por que usar listas? Listas. Listas - Solução. Listas - Problema

1. Faça um programa que leia uma string digitada pelo usuário e salve em um arquivo em branco.

Computação I - Python Aula 4 - Teórica: Variáveis e Atribuição, Strings

ESTRUTURA DE DADOS VETORES E LISTAS LINEARES

Computação 1 - Python Aula 4 - Teórica: Variáveis e Atribuição, Strings 1/ 26

Variáveis Compostas. Vanessa Braganholo

TCC 00308: Programação de Computadores I Matrizes

Computação I - Python Aula 1 - Teórica: Manipulação de Strings, Tuplas e Listas

Subprogramação. Vanessa Braganholo

Exercícios: Vetores e Matrizes

Estruturas de Repetição. Leonardo Murta

MCG114 Programação de Computadores I. Strings. Strings. Strings. Strings. Strings 3/26/18. Profa. Janaína Gomide

Introdução à Computação II (Noturno) BCC Unesp Rio Claro/SP 2015 em PDF via Moodle: Escolha apenas 5 exercícios para entrega Exercício 01 (Pilhas)

MC-102 Aula 11 Strings

Preparação para Maratona de Informática PYTHON

Estruturas de Repetição. Vanessa Braganholo

Apêndice A. Alguns construtores e métodos importantes e úteis da classe Vector são:

Computação Eletrônica. Vetores e Matrizes. Prof: Luciano Barbosa. CIn.ufpe.br

Introdução à Programação

Introdução à Programação / Programação I

Python. Resumo e Exercícios P2 Parte 1

Programação: Vetores

Python 3.x Estrutura de Repetição while

MAC2166 Introdução à Computação

Arquivos. Vanessa Braganholo

TCC 00308: Programação de Computadores I Organização de programas em Python

Programação I Aula 8 Cadeias de carateres

Exercícios: Arquivos

Introdução à Programação / Programação I

Manipulação de Strings

Aluno: Valor Nota Q1 3.0 Q2 2.5 Q3 2.5 Q4 2.0 Total 10.0

BAC004 Informática Teórica T2 Professora: Fabiana Costa Guedes Lista 05 Vetores e Matrizes Vetores

Comandos de Entrada e Saída. Prof. Alberto Costa Neto Programação em Python

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO MARANHÃO - CAMPUS CAXIAS. Aluno (s): 01 ATIVIDADE. Revisão de Conteúdo

LINGUAGEM C: ARRAY: VETORES E MATRIZES

S U M Á R I O. Definição de Estrutura de Dados. Vetores. Listas Ligadas. Pilhas. Filas

Lista de Exercícios sobre Listas Implementadas por Encadeamento

LINGUAGEM C: FUNÇÕES FUNÇÃO 08/01/2018. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

Algoritmos. Prof. Jonatas Bastos Site:

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

Computação eletrônica: Estruturas de repetição

Listas: a última das 3 estruturas lineares (Pilhas, Filas e Listas)... árvores e grafos são não lineares!

Aula de hoje. Listas. Sequências especiais. Introdução. Listas. Sequências. SCC Introdução à Programação para Engenharias

Universidade Federal de Mato Grosso. Secretaria de Tecnologias da Informação e Comunicação. SISCOFRE Sistema de Controle de Frequência MANUAL

Arquivos. Leonardo Murta

Listas Estáticas. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

Algoritmos e estrutura de dados

Laboratório de Programação A Exercícios sobre vetores e matrizes

Classificação Externa: Geração de Partições Classificadas

Variáveis e Entrada de Dados Marco André Lopes Mendes marcoandre.googlepages.

Introdução a Algoritmos Parte 09

ÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

LÓGICA DE PROGRAMAÇÃO. Algoritmos Computacionais. Sérgio Carlos Portari Júnior

ALGORITMOS E ESTRUTURAS DE DADOS CES-11

Computação 1 - Python 1/ 41

Departamento de Engenharia Rural Centro de Ciências Agrárias. Programação I

Questão 1 Exemplo de execução 1 (com N=6): Exemplo de execução 2 (com N=4):

Aula de hoje. Comandos. Comandos simples. Comandos. Comandos de controle. Bloco de comandos. SCC Introdução à Programação para Engenharias

ORDENAÇÃO DE ARQUIVOS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Introdução à Programação Aula 9 Listas e tuplos

Estruturas de Dados Pilhas, Filas, Listas

Programação I Aula 9 Listas e tuplos

Lista de Exercícios 12 Listas em Python exercícios iniciais

Universidade Federal do ABC Avaliação Disciplina Turma Professor Data Instruções para a prova (leia antes de começar): SelectionSort selectonsortrec

Computação 1 - Python Aula 2 - Teórica. João Carlos, Carla Delgado, Ana Luisa Duboc 1/ 39

ÁRVORE B. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Módulo: PYTHON. Felipe Oliveira

Estruturas de Dados em Python

ALGORITMOS DE ORDENAÇÃO

LISTA DE EXERCÍCIOS - ro. 04

Computação I - Python

AULA 2: INTRODUÇÃO A PYTHON. Luís Feliphe Silva Costa

Escola Politécnica Prova Substitutiva 8 de julho de 2014

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática

Programação II. Listas Encadeadas (Linked Lists) Bruno Feijó Dept. de Informática, PUC-Rio

Transcrição:

Manipulação de Listas Vanessa Braganholo vanessa@ic.uff.br

Operações sobre listas } É possível realizar diversas operações sobre listas } Contar o número de vezes que um determinado elemento aparece dentro de uma lista } Inserir um elemento no final da lista } Inserir um elemento em uma determinada posição } Concatenar duas listas } Excluir um elemento que está numa determinada posição, ou que tem um determinado valor } Encontrar a posição de um elemento dentro de uma lista } Ordenar uma lista } Saber se um determinado elemento está em uma lista

Contar Elementos } Já sabemos contar elementos } Exemplo: contar quantas vezes o elemento de valor 10 aparece na lista

Contar Elementos } Já sabemos contar elementos } Exemplo: contar quantas vezes o elemento de valor 10 aparece na lista lista = [1, 10, 2, 10, 3, 10, 4, 5, 6] cont = 0 for i in range(len(lista)): if lista[i] == 10: cont += 1 print(cont) 3

Alternativa: método count(elemento) lista = [1, 10, 2, 10, 3, 10, 4, 5, 6] cont = lista.count(10) print(cont) 3

Inserir um elemento no final da lista } Já sabemos usar o método append(elemento) >>> lista = [1, 2, 3] >>> lista.append(4) >>> lista [1, 2, 3, 4]

Concatenar duas listas } Inserir os elementos de lista2 ao final de lista1

Concatenar duas listas } Inserir os elementos de lista2 ao final de lista1 lista1 = [1, 2, 3, 4] lista2 = [5, 6, 7] for i in range(len(lista2)): lista1.append(lista2[i]) print(lista1) [1, 2, 3, 4, 5, 6, 7]

Alternativa: + } Usar a operação de soma (+) lista1 = [1, 2, 3, 4] lista2 = [5, 6, 7] lista1 = lista1 + lista2 print(lista1) [1, 2, 3, 4, 5, 6, 7]

Alternativa: método extend(lista2) } Inserir os elementos de lista2 ao final de lista1 lista1 = [1, 2, 3, 4] lista2 = [5, 6, 7] lista1.extend(lista2) print(lista1) [1, 2, 3, 4, 5, 6, 7]

Inserir um elemento em uma determinada posição } Inserir o elemento 10 na posição 2 de uma lista

Inserir um elemento em uma determinada posição } Inserir o elemento 10 na posição 2 de uma lista lista = [1, 2, 3, 4] lista.append(0) pos = 2 #abre espaço para inserir o novo elemento for i in range(len(lista)-1, pos-1, -1): lista[i] = lista[i-1] lista[pos] = 10 [1, 2, 10, 3, 4] print(lista)

Alternativa: método insert(indice, elemento) lista = [1, 2, 3, 4] lista.insert(2, 10) print(lista) [1, 2, 10, 3, 4]

Excluir um elemento } Excluir o elemento da posição 2 da lista [1, 2, 3, 4]

Excluir um elemento } Excluir o elemento da posição 2 da lista [1, 2, 3, 4] lista = [1, 2, 3, 4] pos = 2 temp = [] for i in range(len(lista)): if i!= pos: temp.append(lista[i]) lista = temp print(lista) [1, 2, 4]

Alternativa: método pop(índice) lista = [1, 2, 3, 4] lista.pop(2) print(lista) [1, 2, 4]

Método pop() } Quando o índice é omitido, o método pop remove o último elemento da lista [1, 2, 3]

Excluir um elemento } Excluir a primeira ocorrência do elemento de valor 4 da lista [1, 4, 5, 6, 4, 7]

Excluir um elemento } Excluir a primeira ocorrência do elemento de valor 4 da lista [1, 4, 5, 6, 4, 7] lista = [1, 4, 5, 6, 4, 7] valor = 4 removeu = False temp = [] for i in range(len(lista)): if lista[i]!= valor or removeu: temp.append(lista[i]) else: removeu = True lista = temp print(lista) [1, 5, 6, 4, 7]

Alternativa: método remove(elemento) lista = [1, 4, 5, 6, 4, 7] lista.remove(4) print(lista) [1, 5, 6, 4, 7]

Encontrar um elemento dentro da lista } Encontrar o elemento de valor 10 na lista [1, 2, 10, 5, 20] e retornar a posição em que ele foi encontrado

Encontrar um elemento dentro da lista } Encontrar o elemento de valor 10 na lista [1, 2, 10, 5, 20] e retornar a posição em que ele foi encontrado lista = [1, 2, 10, 5, 20] valor = 10 pos = -1 for i in range(len(lista)-1,-1,-1): if lista[i] == valor: pos = i print(pos) 2

Alternativa: index(elemento) lista = [1, 2, 10, 5, 20] pos = lista.index(10) print(pos) 2

Método index(elemento) } Quando o elemento procurado não está na lista, o método index lança uma exceção >>> lista = [1, 2, 3, 4] >>> lista.index(7) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: 7 is not in list

Teste de Pertinência } Retornar True caso o valor 10 pertença à lista, e False caso contrário

Teste de Pertinência } Retornar True caso o valor 10 pertença à lista, e False caso contrário lista = [1, 2, 3, 4] valor = 7 resultado = False for i in range(len(lista)): if lista[i] == valor: resultado = True print(resultado) False

Alternativa: elemento in lista lista = [1, 2, 3, 4] resultado = 7 in lista print(resultado) False

Ordenar uma lista } Selection Sort, Insertion Sort, Bubble Sort, etc

Ordenar uma lista } Selection Sort [1, 2, 3, 3, 4, 5, 7, 8, 9, 10, 11] lista = [10, 9, 8, 7, 5, 3, 4, 3, 1, 2, 11] lista_ordenada = [] tam = len(lista) for i in range(tam): menor = lista[0] for j in range(len(lista)): if lista[j] < menor: menor = lista[j] pos_menor = j lista_ordenada.append(menor) lista.remove(menor) print(lista_ordenada)

Alternativa: método sort() lista = [10, 9, 8, 7, 5, 3, 4, 3, 1, 2, 11] lista.sort() print(lista) [1, 2, 3, 3, 4, 5, 7, 8, 9, 10, 11]

Ordem decrescente } Também é possível ordenar a lista em ordem decrescente usando reverse() lista = [1, 3, 2, 4] lista.reverse() print(lista) [4, 3, 2, 1]

Fatias (Slices) } Até agora acessamos os elementos de uma lista usando índices únicos } Os elementos de uma lista também podem ser acessados por faixas de índice } Em Python, isso é feito usando a notação de fatias (slices)

Slices } lista[inicio:fim] } Retorna a lista formada pelo elemento que está na posição início até o elemento que está na posição fim 1 } lista[:fim] } Retorna a lista formada pelo elemento que está na posição 0 até o elemento que está na posição fim 1 } lista[inicio:] } Retorna a lista formada pelo elemento que está na posição início até o último elemento } lista[:] } Retorna a lista toda

Exemplos >>> lista = [ a, b, c, d, e ] >>> lista[2:] [ c, d, e ] >>> lista [:3] [ a, b, c ] >>>lista[:0] []

Exemplos >>> lista[1:3] [ b, c ] >>> lista[1:-1] [ b, c, d ] >>> lista[:-2] [ a, b, c ]

Exemplos >>> lista[1:3] [ b, c ] última posição da lista >>> lista[1:-1] [ b, c, d ] >>> lista[:-2] [ a, b, c ] Notar que o slide vai até fim 1, portanto esse comando retorna até a penúltima posição

Slice com Incremento } lista[inicio:fim:passo] } Retorna os elementos que vão da posição início até a posição fim, com incremento passo

Exemplos >>> lista = [1, 2, 3, 4, 5, 6] >>> lista[:-1:2] [1, 3, 5] >>> lista[5:0:-1] [6, 5, 4, 3, 2]

Exemplos >>> lista[1:-1:3] [2, 5] >>> lista[::-1] [6, 5, 4, 3, 2, 1]

Atribuição } Já sabemos que elementos de uma lista podem ser substituídos por outro elemento qualquer basta usar o índice da posição do elemento que queremos substituir >>> lista = [1, 2, 3, 4, 5, 6] >>> lista[3] = a >>> lista[5] = b >>> lista [1, 2, 3, a, 5, b ]

Atribuição com slices } Quando se usa slices numa atribuição, os elementos que estão na fatia são substituídos >>> lista = [1,2,3,4,5] >>> lista[1:3] = [ a, b ] >>> lista [1, a, b, 4, 5]

Atribuição com slices } Quando se usa slices numa atribuição, os elementos que estão na fatia são substituídos >>> lista = [1,2,3,4,5] >>> lista[1:3] = [ a, b ] >>> lista [1, a, b, 4, 5] Equivale a >>> lista[1:3] = a, b Exceto quando a lista da direita tem apenas um elemento. Nesse caso ela deve estar envolta em []

Atribuição com slices } O que acontece quando se atribui uma quantidade de elementos menor (ou maior) do que a fatia determinada no comando? } A atribuição substitui os elementos da fatia pelos novos elementos, independente da quantidade >>> lista = [1, 2, 3, 4, 5] >>> lista[1:3] = [10, 20, 30, 40] >>> lista [1, 10, 20, 30, 40, 50, 4, 5]

Atribuição com slices } O que acontece quando a fatia especificada no comando de atribuição é maior que a quantidade de elementos da lista que está sendo atribuída? } O comando de atribuição substitui os elementos do início da fatia até o fim da lista pelos novos elementos, estendendo a lista, se necessário

Exemplo >>> lista = [1, 2, 3, 4, 5, 6] >>> lista[2:10] = [7] >>> lista [1, 2, 7] >>> lista = [1, 2, 3, 4, 5, 6] >>> lista[1:10] = [7, 8, 9, 10, 11, 12] >>> lista [1, 7, 8, 9, 10, 11, 12]

Atribuição com slices } Exceção: quando usamos incremento, a quantidade de elementos inseridos e o tamanho da fatia devem ser compatíveis, caso contrário o Python gerará um erro

Exemplo sem erro >>> lista = [1, 2, 3, 4, 5] >>> lista[0::2] = [ x, y, z ] >>> lista [ x, 2, y, 4, z ]

Exemplo com erro >>> lista = [1, 2, 3, 4, 5] >>> lista[0::2] = [6, 7] Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: attempt to assign sequence of size 2 to extended slice of size 3

Exercícios } Façam manualmente e depois usem o IDLE para conferir as respostas >>> lista = [1, 2, 3, 4, 5] >>> lista[1:1] = ['z'] >>> lista[1:3] = [[7]] >>> lista[1:-1] = [8,9,10] >>> lista[:2] = 1, 2, 3

Representação de Listas em Memória } O valor de uma variável de lista na verdade é um endereço de memória

Representação de Listas em Memória Em Phyton Na Memória notas = [8.2, 5.0, 7.1] turma = B media = 0 0 8.2 for i in range(len(notas)): media = media + notas[i] media = media/len(notas) 1 2 media 5.0 7.1 6.76 &123 notas &123 turma B

Cópia de listas } Ao copiar uma lista para outra, o que é feito é copiar o valor do endereço de memória } Ambas passam a apontar para o mesmo endereço, portanto o que for modificado em uma lista também será modificado na outra

Cópia de Listas Em Phyton >>> lista1 = [1, 2, 3] >>> lista2 = lista1 Na Memória 0 1 1 2 lista1 lista2 2 3 &123 &123 &123

Cópia de Listas Em Phyton Na Memória >>> liata1 = [1, 2, 3] >>> lista2 = lista1 >>> lista1[0] = 10 0 10 >>> lista1 [10, 2, 3] >>> lista2 [10, 2, 3] 1 2 lista1 lista2 2 3 &123 &123 &123

Cópia de Listas Em Phyton Na Memória >>> liata1 = [1, 2, 3] >>> lista2 = lista1 >>> lista1[0] = 10 0 10 >>> lista1 [10, 2, 3] >>> lista2 [10, 2, 3] >>> lista2[1] = 20 1 2 lista1 lista2 20 3 &123 &123 &123 >>> lista2 [10, 20, 3] >>> lista1 [10, 20, 3]

Como evitar isso? } Duas opções: 1. Usar um for para copiar valor a valor 2. Usar slices para fazer a cópia

Opção 1: uso de for >>> lista1 = [1, 2, 3] >>> lista2 = [] >>> for i in range(len(lista1)):... lista2.append(lista1[i])... 0 1 2 1 2 3 &123 lista1 &123 lista2 &180 0 1 1 2 &180 2 3

Opção 2: uso de slice >>> lista1 = [1, 2, 3] >>> lista2 = lista1[:] 0 1 1 2 2 3 &123 lista1 lista2 0 1 2 &123 &180 1 2 3 &180

Em ambos os casos... } Alterações em uma lista não são refletidas na outra >>> lista1 = [1, 2, 3, 4, 5] >>> lista2 = lista1[:] >>> lista2[0] = 10 >>> lista1 [1, 2, 3, 4, 5] >>> lista2 [10, 2, 3, 4, 5] >>> lista1[3] = 20 >>> lista2 [10, 2, 3, 4, 5]

Exercícios 1. Faça um programa que percorre uma lista com o seguinte formato: [['Brasil', 'Italia', [10, 9]], ['Brasil', 'Espanha', [5, 7]], ['Italia', 'Espanha', [7,8]]]. Essa lista indica o número de faltas que cada time fez em cada jogo. Na lista acima, no jogo entre Brasil e Itália, o Brasil fez 10 faltas e a Itália fez 9. O programa deve imprimir na tela: (a) o total de faltas do campeonato (b) o time que fez mais faltas (c) o time que fez menos faltas

Exercícios 2. Faça um programa que simule um lançamento de dados. Lance o dado 10 vezes e armazene os resultados em um vetor. Depois, monte um outro vetor contendo quantas vezes cada valor foi obtido. Imprima os dois vetores. Use uma função para gerar números aleatórios, simulando os lançamentos dos dados. Exemplo de uma possível saída: [3, 1, 5, 3, 5, 4, 5, 5, 3, 6] [1, 0, 3, 1, 4, 1]

Exercícios 3. Faça um programa que percorre um vetor e imprime na tela o valor mais próximo da média dos valores do vetor. Exemplo: vetor = [2.5, 7.5, 10.0, 4.0] (média = 6.0) Valor mais próximo da média = 7.5

Exercícios 4. Faça um programa que percorre duas listas e intercala os elementos de ambas, formando uma terceira lista. A terceira lista deve começar pelo primeiro elemento da lista menor. Exemplo: lista1 = [1, 2, 3, 4] lista2 = [10, 20, 30, 40, 50, 60] lista_intercalada = [1, 10, 2, 20, 3, 30, 4, 40, 50, 60]

Exercícios 5 - Em uma universidade são distribuídas 300 senhas para a fila do bandejão, que funciona da seguinte forma: As filas começam a se formar pela manhã. Até às 11h, horário de abertura do restaurante, alunos podem guardar lugar para no máximo 3 outros colegas, depois disso a fila é congelada. Se a quantidade de pessoas na fila + lugares guardados ultrapassar 300, os extras ficarão sem senha. Escreva um programa que percorre uma lista com as matrículas dos alunos que estão aguardando na fila. Para cada aluno, começando do último, descubra quantos alunos de fato comerão no bandejão (em dias de comida ruim, pode ser que sobrem senhas!). Para tanto, pergunte para quantas pessoas ele está guardando lugar na fila e se ele irá continuar na fila (para esta pergunta ele deverá responder S ou N ). Com essa informação, atualize a fila, inserindo a matrícula daqueles que ainda irão chegar e removendo aqueles que vão sair da fila. Imprima a fila final, de acordo com ordem de chegada (se a fila for maior que 300, remover os excedentes antes de imprimir a fila).

Exercícios 6. Faça um programa que manipula uma lista que contém modelos de carro e seu consumo (km/l), da seguinte forma: [[ Vectra, 9], [ Gol, 10], [ Corsa, 11], [ Fit, 12.5]]. O programa deve mostrar na tela o nome do modelo mais econômico. Além disso, deve mostrar na tela quanto cada um desses modelos gastaria para percorrer 1000 Km, assumindo que o valor do litro da gasolina é R$ 3,50.

Exercícios 7. Faça um programa que funciona como uma agenda telefônica. A agenda deve ser guardada em uma lista com o seguinte formato: [[ Ana, 99999-1234 ], [ Bia, 99999-5678 ]]. O programa deve ter um menu que tenha as seguintes opções: (a) Adicionar telefones na agenda -- isso deve ser feito de forma que ela se mantenha sempre ordenada -- cada nome novo já deve ser inserido na posição correta dentro da agenda (b) Procurar um telefone -- o usuário informa um nome e o programa mostra o número do telefone, ou diz que não está na agenda A busca deve ser inteligente: deve parar assim que encontrar um nome maior do que o nome que está sendo buscado, ao invés de percorrer a lista sempre até o final para concluir que um nome não está na agenda.

Referências } Slides baseados no curso de Aline Paes 67