Aula 17 - Python
1 Dinamica
Variaveis não precisam ser declaradas e não tem tipos
x = 90 x = "qwerty" x = [3,4,56]
2 sintaxe
Brancos e mudança de linha como separador de comandos e indicador de blocos (como o haskel)
3 Tipos
3.1 basicos
- int
- float
- complex
- bool
3.2 "compostos"
- lista [2, 3, "abc", [], 6.7]
- string "querty" ou 'querty'
- tupla (1,"abc", 2)
- dicionario { "abc":4, "de":9, "aav": -3}
- set
- frozenset
- …
3.3 mutaveis e imutaveis
- tipos basicos sao imutaveis
Trocar o valor de uma variavel que contem um tipo basico significa criar um novo valor e apontar a variável para esse novo valor.
x=5 id(x) x=x+1 id(x)
id
retorna o valor do apontador de uma variavel
- listas são mutaveis - modificar um valor mutavel mantem o mesmo apontados
x = [10, 20, 30, 40] id(x) x[1] x[1] = 99 x id(x)
- String e tuplas são imutaveis - operações que modificariam essas sequencias não funcionam
x = (10, 20, 30, 40) x[1] x[1]= 99
- dicionarios e conjuntos (set) mutaveis, frozensets sao imutaveis.
4 Listas ( e sequencias)
- indexação começando em 0
- indices não podem passar do fim
- indices negativos - do fim para o comeco
x = [10, 20 , 30, 40, 50] x[0] x[7] x[-2] x[-7]
4.1 slices
subsequencias de listas
x = [10,11,12,13,14,15,16,17,18] x[2:5]
elementos nas posicoes 2 até antes do 5
Abreviacoes:
x[:3] => x[0:3] x[3:] => x[3:final]
Pode atribuir valor a slices, de diferentes tamanhos
x[2:5] = [1,2] x x[2:5] = [] x
4.2 atribuicao
x=[1,2,3] id(x) y=x id(y) z=x[:] id(z)
atribuição apenas faz a variável apontar para o valor velho. Isso é sempre verdade - para qualquer variável - mas para tipos imutaveis isso não é um problema.
a=2 b=a id(a) id(b) b=b+1 a id(b)
[:]
copia a lista (copia rasa)
a= [1,[2,3],4] b=a[:] b[0]=9 b a b[1][0]=99 b a
4.3 operadores, funcoes e metodos em lista
- len(l) tamanho
- l.append(v) insere v no final de l
- x in l - True se x aparece na lista
- x not in l
- l1 + l2 - append
- 5 * [1,2,3] = [1,2,3,1,2,3,1,2,3]
- lista1 < lista2 - ordem lexicografica
- lista2 == lista2
- max(l) - maior valor em l
- l.sort - modifica l
- sorted(l) - retorna nova lista
- outros metodos
- del x[1] - remove - é um operador e nao uma funçao (sem parenteses) ou metodos (sem ponto).
5 List comprehensions
como no Haskel mas com uma sintaxe diferente
[f(x) for x in fonte if condicao] [x**2 for x in [2,3,4,5,6,7] if x % 2 == 0]
6 Tuplas
sequencias como lista mas imutaveis
metodos de lista não funcionam
funcoes de lista funcionam.
x = (1,2,3,4,5) x[1] x[3:] max(x)
6.1 pattern matching
- funciona para tuplas
(a,b) = (10,"qwerty")
- em atribuicoes, valores separados por "," em atribuicoes sao implicitamente tuplas
(a,b) = 10, "querty" a,b = (10,"querty") a,b = 10 , "querty" a,b = b,a
- para listas
*var
é para o resto da lista
[a,b,c] = [1,4.5, "zzz"] [a,*b] = [1,4.5, "zzz"]
7 Strings
- sequencia
- ente " ou '
- imutaveis
- caracteres Unicode,
- sintaticamente, não existe o tipo caracter
x = "qwerty" x[2] x[2][2]
in
testa por substrings
x = 'qwerty' 'wer' in x
- s.split() - words do haskell mas permite outros separadores
- s.splitlines() - lines do haskell
- outros metodos para strings e mais outros
8 Dicionarios
x = { 'asd': 56, 'qwerty': -8, 'zxcv': 3} x['qwerty'] x['zzz'] x['qwerty'] = 9 'zzz' in x
9 Set
10 For
- o comando for passeia pelos elementos de uma sequencia (no futuro
veremos sao os elementos de um iterator).
- para listas,tuplas, strings, e sets sao seus elementos
- para dicionarios sao as chaves
- para gerar numeros no for:
range
list(range(10)) list(range(2,10)) list(range(2,10,3)) for i in range(len(lista)):
list
converte o objeto para listas
11 Exercicios
- criar uma lista com apenas os valores pares de outra lista
- criar uma lista com os valores nas posicoes pares
- criar um dicionario com a contagem de cada elemento numa lista
- qual é a chave associada ao maior valor num dicionario
- qual o elemento mais comum numa lista
- uma lista é sublista de outra?
- dado 2 strings o fim de um é igual ao comeco do outro?