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

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

Introdução à Programação

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

Programação I Aula 9 Listas e tuplos

Aula passada. Aula passada... Sequências Funções puras e modificadores. Listas Tuplos

Listas, conjuntos e dicionários

Algoritmos e Estrutura de Dados Aula 02 Listas em Python

Nas aulas anteriores Strings. Ciclos

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

Dicionários. Operações Aliases, cópias. Os tipos de dados compostos que estudamos até ao momento (strings, listas, tuplos) são sequenciais:

Listas e Tuplas. Vanessa Braganholo

Listas. Prof. Alberto Costa Neto Programação em Python

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

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

Python: Listas. Claudio Esperança

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

Programação I Aula 8 Cadeias de carateres

Tuplas. Prof. Alberto Costa Neto Programação em Python

Linguagem Python. Processamento Estatístico da Linguagem Natural. Barra invertida em strings. Strings. Aspas triplas. Operações com Strings

Estruturas de Dados em Python

Programação I Aula 11 Mais sobre ciclos e iteração

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

Introdução à Ciência da Computação Disciplina: Prof. Edison Ishikawa Python 3.0 Aula 05 Listas

Sequências - Tuplas. Sequências - Tuplas

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

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

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

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

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

Tuplas e Dicionários. Vanessa Braganholo vanessa@ic.uff.br

Laboratório de Programação 1 Aula 07

Departamento de Ciência da Computação Python 3.x Tipo de Dados Listas. Introdução à Ciência da Computação. Prof. Edison Ishikawa

Introdução à Programação Aula 17 Deteção e correção de erros

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

Aula de hoje. Outras estruturas de dados. Teoria dos conjuntos. Teoria dos conjuntos. Conjuntos em Python. Conjuntos em Python

Aula de hoje. Strings. Expressões lógicas. Relações lógicas equivalentes. Operadores para strings. Introdução

Nas aulas anteriores. Tipos nativos do Python: Tipos simples: inteiros, floats, booleanos. Tipos compostos: strings, listas, dicionários.

Python: Voltando aos Containers

Computação 1. Aula 4 - Teórica Professor: Leonardo Carvalho

Introdução à Programação Aula 14 Dicionários

TIPOS ESTRUTURADOS. Prof. Msc. Luis Filipe Alves Pereira 2015

Programação I Aula 14 Dicionários

Manipulação de Strings. Vanessa Braganholo

Processamento da Informação Teoria. Strings

Estrutura de Dados. Diego Silveira Costa Nascimento

Nas aulas anteriores. Programação orientada a objetos Classes Atributos e métodos

Estruturas de dados funcionais

Lista de Linguagens de Programação 16

MCG126 Programação de Computadores II

Programação I Aula 10 Processamento de listas

Processamento da Informação Teoria. Coleções: Listas

ICE-B. 6 - Iteração. Ludwig Krippahl

Linguagem Python. Inteligência Artificial. Características de Python. Importando módulos. Módulos. Usando Python no modo interativo

Operador in e Caracteres

Processamento da Informação Teoria. Exercícios sobre strings

Introdução à Computação Strings

Programação I Aula 10 Processamento de listas

Módulo: PYTHON. Felipe Oliveira

Computação 1 - Python Aula 3 - Teórica: Tipos de dados, Strings, Estrutura Condicional 1/ 28

Departamento de Ciência da Computação Python 3.x Tipo de Dados String. Introdução à Ciência da Computação. Prof. Edison Ishikawa

PRIMEIROS PASSOS COM PYTHON. Prof. Msc. Luis Filipe Alves Pereira 2015

PROGRAMAÇÃO E PYTHON. Laboratórios de Informática João Paulo Barraca, André Zúquete, Diogo Gomes

Programação I Aula 14 Dicionários Pedro Vasconcelos DCC/FCUP

24/09/2014. Prof. André Backes

Características de Python. Inteligência Artificial. Baixando e Instalando. Operadores. Variáveis. Strings 9/10/2010

VARIÁVEIS, OPERADORES ARITMÉTICOS E LISTAS

Processamento da Informação Teoria. Laços

Minicurso de Python Aula 2. Raphael Lupchinski Marcelo Millani

Programação I Aula 17 Correção de programas Pedro Vasconcelos DCC/FCUP

Nesta aula... Parâmetros opcionais Atribuição abreviada Instruções break e continue Interrupção da execução. 1 Estudo desta disciplina.

1 Definição de funções 1. 2 Valores boleanos e condicionais 5. Podemos depois usar as novas funções tal qual as pré-definidas

ICE-B. 7 - Condições. Ludwig Krippahl

Fundamentos da Programação

MC-102 Aula 11 Strings

Aula de hoje. Tipos de Dados e Variáveis. Constantes literais. Dados. Variáveis. Tipagem dinâmica. SCC Introdução à Programação para Engenharias

Allen B. Downey. Novatec

Python 3.x Tipos de Dados Tuplas Dicionários

Programação Estruturada e Orientada a Objetos

Introdução à Ciência da Computação Disciplina:

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

Vetores. Vanessa Braganholo

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

Nesta aula... Diagramas da stack. Recursão. 1 Funções. 2 Valores booleanos e condicionais. 3 Execução condicional e recursão

Processamento da Informação Teoria. Listas e Matrizes

Algoritmos e Programação

Programação I Aula 12 Mais sobre cadeias e listas

Capítulo VIII. Tipo Abstracto de Dados Dicionário. Acesso por Chave

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

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

Introdução à Programação

if not(isinstance(a, int)) or a < 0: raise ValueError ("misterio: arg nao e inteiro nao negativo") else: return misterio_aux(a, a + 1)

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

ICE-B. 2 - Variáveis. Ludwig Krippahl

Introdução à Programação Aula 10 Processamento de listas

Prof. Natalia Castro Fernandes Mestrado em Telecomunicações UFF 2º semestre/2012

Introdução à Ciência da Computação Disciplina:

Pedro Vasconcelos DCC/FCUP. Programação Funcional 5 a Aula Definições recursivas

14 - Dados Estruturados

Algoritmos e Estrutura de Dados Aula 08 Pilhas

Fabio G. Cozman, Thiago Martins 2017

Transcrição:

Programação I / Introdução à Programação Capítulo 5, "Data types" (listas e tuplos) João Pedro Pedroso 2021/2022 Informo que partes desta aula serão gravadas. Se intervierem durante a gravação assumo que autorizam a que a vossa participação aí apareça. Caso discordem, por favor deixem as vossas questões para o período de dúvidas, que não será gravado.

Última aula: listas: Operadores: comprimento, concatenação, repetição, pertença, indexação Iteração Remoção de elementos (por índice e por valor) Objetos e referências Métodos que não alteram as listas index, count, copy que alteram as listas append, insert, remove, sort Hoje: Listas e tuplos

Fatias de listas lst[i:j:k] elementos de i a j 1 com incrementos k incrementos negativos percorrer a lista ao contrário: elementos j, j k,... até i (exclusive). >>> vogais = ['a','e','i','o','u'] >>> vogais[::2] # índices pares ['a','i','u'] >>> vogais[1::2] # índices ímpares ['e','o'] >>> vogais[4:1:-1] ['u', 'o', 'i'] >>> vogais[::-1] # inverter a lista ['u', 'o', 'i', 'e', 'a']

Função range Em Python range() gera uma sequência de inteiros: range(n) [0, 1,... n-1] >>> list(range(7)) [0, 1, 2, 3, 4, 5, 6] range(m,n) [m, m+1,..., n-1] >>> list(range(2,7)) [2, 3, 4, 5, 6] range(m,n,k) r[i] = m + k*i, onde i >= 0 e r[i] < n para k>0 >>> list(range(2,7,3)) [2, 5] r[i] > n para k<0 >>> list(range(7,2,-3)) [7, 4] se o sinal de k for diferente do de n m sequência vazia: >>> list(range(7,2,3)) []

Operador in: teste de pertença com listas: x in y é True se x for um elemento de y caso contrário é False com strings: x in y é True se x for uma substring de y caso contrário é False caso particular: x ser um elemento de y (como com listas)

Objetos e referências Para testar se dois nomes se referem ao mesmo objeto: operador is object identity x is y é verdadeiro se e só se x e y são o mesmo objeto Aliasing >>> a = [11, 7, 2] >>> b = [11, 7, 2] >>> a == b True >>> a is b False >>> a = [11, 7, 2] >>> b = a >>> a is b True Cloning: >>> a = [11, 7, 2] >>> b = list(a) # or: b = a[:], b = a.copy() >>> b [11, 7, 2] >>> a is b False

Nota: como strings são imutáveis, o Python otimiza a utilização de memória: >>> a = "banana" >>> b = "banana" >>> a is b True

Módulo copy a = [[1,2,-1], [3,1,0], [0,1,-2]] b = a.copy() # shallow copy # import copy # alternative form # c = copy.deepcopy(a) # in lines below from copy import deepcopy c = deepcopy(a) Qual é a diferença? slide a seguir

Instrução import Nota sobre a instrução import: from copy import deepcopy c = deepcopy(a) é equivalente a import copy c = copy.deepcopy(a) útil quando queremos importar apenas uma (ou poucas) das funcionalidades do módulo permite código mais conciso

Mais métodos sobre listas: reverse, count, extend, index, remove >>> mylist = [5, 27, 3] >>> mylist.append(12) >>> mylist.insert(1, 12) # Insert 12 at pos 1, shift other items up >>> mylist [5, 12, 27, 3, 12] >>> mylist.count(12) # How many times is 12 in mylist? 2 >>> mylist.extend([5, 9, 5, 11]) # Put whole list onto end of mylist >>> mylist [5, 12, 27, 3, 12, 5, 9, 5, 11] >>> mylist.index(9) # Find index of first 9 in mylist 6 >>> mylist.reverse() >>> mylist [11, 5, 9, 5, 12, 3, 27, 12, 5] >>> mylist.remove(12) # Remove the first 12 in the list >>> mylist [11, 5, 9, 5, 3, 27, 12, 5] >>> mylist.sort() >>> mylist [3, 5, 5, 5, 9, 11, 12, 27]

Alteração de listas in place >>> xs = [1, 2, 3, 4, 5] >>> for i in range(len(xs)):... xs[i] = xs[i]**2... >>> xs [1, 4, 9, 16, 25] no nosso idioma favorito: xs = [1, 2, 3, 4, 5] for (i, val) in enumerate(xs): xs[i] = val**2

Funções com listas como parâmetros 1 def double_stuff(stuff_list): 2 """ Overwrite each element in a_list with double its value. """ 3 for (index, stuff) in enumerate(stuff_list): 4 stuff_list[index] = 2 * stuff Quando utilizamos: >>> things = [2, 5, 9] >>> double_stuff(things) >>> things [4, 10, 18]

Listas, funções puras e modificadores Funções puras não produzem efeitos laterais Um efeito lateral possível é a modificação de argumentos 1 def double_stuff(stuff_list): 2 for (index, stuff) in enumerate(stuff_list): 3 stuff_list[index] = 2 * stuff Verão "pura" 1 def double_stuff(a_list): 2 """ Return a new list which contains doubles of the elements in a_list 3 new_list = [] 4 for value in a_list: 5 new_elem = 2 * value 6 new_list.append(new_elem) 7 return new_list modificador >>> things = [2, 5, 9] >>> double_stuff(things) >>> things [4, 10, 18] função pura >>> things = [2, 5, 9] >>> more_things = double_stuff(things) >>> things [2, 5, 9] >>> more_things [4, 10, 18]

Modificador é mais eficiente a utilizar se não precisarmos mais do valor inicial de things suscetível de originar error Vimos no exemplo da função pura o padrão de função que retorna uma lista

Listas e strings >>> song = "The rain in Spain..." >>> words = song.split() >>> words ['The', 'rain', 'in', 'Spain...'] >>> song.split("ai") ['The r', 'n in Sp', 'n...'] >>> glue = ";" >>> phrase = glue.join(words) >>> phrase 'The;rain;in;Spain...' >>> " --- ".join(words) 'The --- rain --- in --- Spain...' >>> "".join(words) 'TheraininSpain...'

Listas e range range não calcula os valores todos quando é chamado coloca o cálculo "em espera" só quando os valores são necessários é que os calcula cálculo lazy 1 def f(n): 2 for i in range(101, n): 3 if (i % 21 == 0): 4 return i >>> f(1000000000) 105 compare com for i in list(range(101, n)) versões 2 e 3 do Python são diferentes!

Tuplos Sequências ordenadas de elementos: (e1, e2,..., en) Acesso aos elementos por índices Ao contrário das listas, os tuplos são imutáveis

Operações básicas comprimento >>> len(('pedro',12)) 2 concatenação >>> ('Pedro',12)+('João',14) ('Pedro',12,'João',14) repetição >>> 2*('Pedro',12) ('Pedro',12,'Pedro',12) pertença >>> 12 in ('Pedro',12) True iteração >>> for x in ('Pedro',12): print(x) Pedro 12

Acesso aos elementos (indexação) >>> nota = ('Pedro', 12) >>> nota[0] 'Pedro' >>> nota[1] 12 >>> nota[0] = 'Joao' TypeError: 'tuple' object does not support item assignment

Caso especial: tuplos com um só elemento >>> t = (42,) >>> t (42,) >>> len(t) 1 >>> t[0] 42

Atribuição a tuplos de variáveis >>> (x,y) = (5,-7) >>> x 5 >>> y -7 Ou simplesmente: >>> x,y = 5,-7 >>> x 5 >>> y -7 Name swapping: >>> x,y = 5,-7 >>> x,y = y,x >>> x -7 >>> y 5

Listas e tuplos combinados Representar uma agenda como uma lista de pares nome/email: [('Maria João', 'mj@mail.pt'), ('José Manuel', 'jm@mail.pt'), ('João Pedro', 'jp@mail.pt')] Operações: acrescentar uma entrada (nome e email) procurar email pelo nome

Acrescentar uma entrada 1 def acrescentar(agenda, nome, email): 2 "Acrescentar um nome e email à agenda." 3 agenda.append((nome,email))

Procurar um nome (1) def procurar(agenda, txt): "Procurar emails por parte do nome." emails = [] for par in agenda: if txt in par[0]: # txt ocorre no nome? emails.append(par[1]) # acrescenta email return emails

Procurar um nome (2) def procurar(agenda, txt): "Procurar emails por parte do nome." emails = [] for (nome,email) in agenda: if txt in nome: # txt ocorre no nome? emails.append(email) # acrescenta email return emails

Exemplos 1 >>> agenda = [] 2 >>> acrescentar(agenda, "Maria João", 3 "mj@mail.pt") 4 >>> acrescentar(agenda,"joão Pedro", 5 "jp@mail.pt") 6 7 >>> procurar(agenda, "Maria") 8 ['mj@mail.pt'] 9 10 >>> procurar(agenda, "João") 11 ['mj@mail.pt', 'jp@mail.pt']

Usar listas ou tuplos? Listas sequências mutáveis Tuplos sequências imutáveis Os tuplos são necessários em casos especiais: chaves de dicionários próximas aulas Podemos converter entre os dois tipos: list(...) converte para lista tuple(...) converte para tuplo >>> a = [1, 2, 3] >>> b = tuple(a) >>> b (1, 2, 3) >>> c = list(b) >>> c[1] = "halt" >>> a, b, c ([1, 2, 3], (1, 2, 3), [1, 'halt', 3])

Noções estudadas aliases clone data structure delimiter element immutable immutable data value index item list list traversal modifier mutable data value nested list object pattern promise pure function sequence side effect step size tuple tuple assignment

Próxima aula Tipos de dados do Python: dicionários