Este documento apresenta uma introdução aos principais tipos de dados em Python, incluindo números, strings, listas, tuplas, conjuntos, dicionários e funções como map, filter e reduce. Demonstra como manipular esses tipos de dados com exemplos de inicialização, iteração, ordenação, filtragem e redução.
2. Tipos primitivos
Numéricos:
int (long em C)
float (double em C)
long (sufixo L)
0.1 + 0.2 != 0.3
Booleano: True, False
True e False são subclasses de int
Falso
None, False, 0, 0.0, 0L, ‘’, (), []
3. Strings
Literais: '' ou ""
Unicode: u"Globo.com"
Raw: r"abc/"
Strings são imutáveis
Podem ser acessadas como um array
nome = "techtudo"
nome[0] # returns "t"
nome[4:10] # returns "tudo"
6. Tuplas
Tuplas são imutáveis
Em geral associadas a listas heterogêneas
x=(10, 20)
x[0] # 10
a = () # lista vazia
a = (1,) # lista unitária
i, j = (3, 4) # atribuição de variáveis
(i, j) = (j, i+1) # alternando valor de variáveis
x = 20, 30 # omitindo o parêntese
7. Set
Lista desordenada que não contém elementos duplicados
x = set([10, 2, 1, 4, 10, 1]) # [1, 10, 4, 2]
x.add(5) # [1, 10, 4, 2, 5]
12 in x # False
y = set([3, 4])
x | y # União [1, 10, 4, 2, 5, 3]
x & y # Interseção [4]
x - y # Diferença [1, 10, 2, 5]
x ˆ y # Diferença simétrica [1, 10, 2, 5, 3]
8. Dicionário (hash)
Conjunto desordenado de valores indexados por uma
chave imutável
dados = {"nome": "Ricardo", "visitas": 10}
dados["nome"] # "Ricardo"
dados["visitas"] += 1 # 11
"nome" in dados # True
dados.get("likes", 0) # Se a chave não
# existir, retorna 0
dados.keys() # ["nome", "visitas"]
dados.values() # ["Ricardo", 10]
dados.items() #[("nome", "Ricardo"), ("visitas", 10)]
http://www.laurentluce.com/posts/python-dictionary-implementation/
9. Pilha e Fila
Pilha
stack = [3, 1, 5]
stack.append(2) # [3, 1, 5, 2]
stack.pop() # [3, 1]
Listas não são eficientes para inserção no início
from collections import deque
fila = deque([5, 8])
fila.append(10) # [5, 8, 10]
fila.popleft() # [8, 10]
10. Percorrendo uma sequência
lista = [1, 4, 2, 3, 8]
for n in lista:
print n
for i in xrange(len(lista)): #xrange or range?
print i
for i, j in enumerate(lista):
print i, j
d = {'a': 1, 'b': 2, 'c': 3}
for k, v in d.items():
print k, v
11. Lista infinita (yield)
Pode-se criar uma lista a partir de uma função
def fibonacci():
i, j = 0, 1
while True:
yield j
i, j= (j, i+j)
for i, n in enumerate(fibonacci()):
print n
if i > 10: break
12. List Comprehension
blocked = []
for user in users:
if users.is_blocked():
blocked.append(users.email)
blocked = [u.email for u in users if user.is_blocked()]
plantao = [c for c in conteudos if not c.is_pubeditorial()]
13. Dict Comprehension
# python 2.6
plantao = dict((c.uri, c) for c in conteudo_semantico)
# python 3
plantao ={c.uri: c for c in conteudo_semantico}
14. Set Comprehension
vogais = set()
for l in "minha frase":
if l in "aeiou":
vogais.add(l)
vogais = {l for l in "minha frase" if l in "aeiou"}
15. map(function, iterable)
def c2f(c):
return 9.0/5.0*c + 32
c_temps = [39.2, 36.5, 37.3, 37.9]
f_temps = map(c2f, c_temps)
# [102.56, 97.7, 99.14, 100.22]
--- ou ---
f_temps = map(lambda c:9.0/5.0*c + 32, c_temps)
map - executação uma função para cada elemento de
uma lista
16. filter(function, iterable)
filter - filtra cada elemento da lista (deve retornar True or
False)
active_users = filter(lambda u: u.is_active(), users)
excluded = filter(lambda u: u.email in blacklist, users)
17. reduce(function, iterable)
reduce - executa uma operação de redução de todos os
valores para um único valor
notas = [9, 8.5, 8.8, 9.1]
maior_nota = reduce(lambda x, y: x if x > y else y, notas)
# 9.1
depositos = [100, 130, 90]
juros = 0.01
soma = reduce(lambda x, y: x * (1 + juros) + y, depositos)
18. sorted(list, [key])
Ordena uma lista sem alterar o original
notas = [9, 8.5, 8.8, 9.1]
sorted(notas) # [8.5, 8.8, 9, 9.1]
sorted(notas, reverse=True) # [9.1, 9, 8.8, 8.5]
produtos=[{"size":10, "cost":5},
{"size":12, "cost":9},
{"size":8, "cost":6}]
sorted(produtos, key=lambda x: x["cost"])
19. notas = [9, 8.5, 8.8, 9.1, 8, 7, 4.3, 7.2]
todos_aprovados = all([n >= 6 for n in notas])
tem_recuperacao = any([n < 6 for n in notas])
media_turma = sum(notas) / len(notas)
maior_nota = max(notas)
menor_nota = min(notas)
aprovados = [n for n in notas if n >=6]
media_aprovados = sum(aprovados) / len(aprovados)
all(), any(), sum(), max(), min()
20. Exemplos (1)
Iniciando um vetor
vetor = [0] * 10 # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Iniciando uma matrix nxm
matriz = [[0 for i in xrange(m)] for j in xrange(n)]
matriz[0][0] = 1
21. Exemplos (2)
lista=[1, 2, 1, 3, 2, 1, 4, 2, 1, 1]
max(set(lista), key=lista.count)
Elemento que mais aparece numa lista
FizzBuzz
fizzbuzz = ["Fizz"*(i%3==0) + "Buzz"*(i%5==0) or str(i)
for i in xrange(1, 100)]