SlideShare a Scribd company logo
1 of 22
Estruturas de Dados
em Python
Ricardo Paiva (Senior Developer @ Globo.com)
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, ‘’, (), []
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"
Listas (1)
lista = [2, 1, 12, 1, 0]
len(lista) # 5
lista[0] = 10 # [10, 1, 12, 1, 0]
lista[0:2] # [10, 1]
lista[:3] # [10, 1, 12]
lista[3:] # [1, 0]
lista[-1] # 0 (último elemento)
lista[1:-1] # [1, 12, 1]
0 based e mutáveis
Possuem ordem
Listas (2)
lista.append(20) # [10, 1, 12, 1, 0, 20]
lista.extend([2, 3]) # [10, 1, 12, 1, 0, 20, 2, 3]
lista[0:3] = [2] # [2, 1, 0, 20, 2, 3]
lista + [4, 5] # [2, 1, 0, 20, 2, 3, 4, 5]
lista.remove(20) # [2, 1, 0, 2, 3]
lista.pop(0) # [1, 0, 2, 3, 4]
1 in lista # True
lista.index(1) # 0
lista2 = list(lista) # copia a lista
lista3 = lista[:] # também copia a lista
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
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]
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/
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]
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
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
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()]
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}
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"}
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
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)
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)
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"])
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()
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
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)]
Obrigado!
ricardo.paiva@corp.globo.com

More Related Content

What's hot

Python Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem PythonPython Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem Pythonantonio sérgio nogueira
 
Estrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesEstrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesLeinylson Fontinele
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPDaniel Brandão
 
Introdução ao Python
Introdução ao PythonIntrodução ao Python
Introdução ao PythonMarcio Palheta
 
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeiraBanco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeiraNatanael Simões
 
Python - Introdução Básica
Python - Introdução BásicaPython - Introdução Básica
Python - Introdução BásicaChristian Perone
 
Comparação Sintaxe Portugol vs Java
Comparação Sintaxe Portugol vs JavaComparação Sintaxe Portugol vs Java
Comparação Sintaxe Portugol vs JavaMario Sergio
 
Algoritmo Variaveis
Algoritmo   VariaveisAlgoritmo   Variaveis
Algoritmo VariaveisAndré Nobre
 
Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoRangel Javier
 
Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Karoline Tavares
 
Lógica de Programação com Javascript - Aula #01
Lógica de Programação com Javascript - Aula #01Lógica de Programação com Javascript - Aula #01
Lógica de Programação com Javascript - Aula #01Ramon Kayo
 
Criando um banco de dados com MySQL Workbench
Criando um banco de dados com MySQL WorkbenchCriando um banco de dados com MySQL Workbench
Criando um banco de dados com MySQL WorkbenchCentro Paula Souza
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Adriano Teixeira de Souza
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosDaniel Brandão
 

What's hot (20)

Aula01-JavaScript
Aula01-JavaScriptAula01-JavaScript
Aula01-JavaScript
 
Python Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem PythonPython Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem Python
 
Aula03 - JavaScript
Aula03 - JavaScriptAula03 - JavaScript
Aula03 - JavaScript
 
Estrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesEstrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e Funções
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHP
 
Introdução ao Python
Introdução ao PythonIntrodução ao Python
Introdução ao Python
 
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeiraBanco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
 
Aula02 - JavaScript
Aula02 - JavaScriptAula02 - JavaScript
Aula02 - JavaScript
 
Python - Introdução Básica
Python - Introdução BásicaPython - Introdução Básica
Python - Introdução Básica
 
Comparação Sintaxe Portugol vs Java
Comparação Sintaxe Portugol vs JavaComparação Sintaxe Portugol vs Java
Comparação Sintaxe Portugol vs Java
 
Algoritmo Variaveis
Algoritmo   VariaveisAlgoritmo   Variaveis
Algoritmo Variaveis
 
Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL Basico
 
Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros
 
Aula 9 banco de dados
Aula 9   banco de dadosAula 9   banco de dados
Aula 9 banco de dados
 
Lógica de Programação com Javascript - Aula #01
Lógica de Programação com Javascript - Aula #01Lógica de Programação com Javascript - Aula #01
Lógica de Programação com Javascript - Aula #01
 
Criando um banco de dados com MySQL Workbench
Criando um banco de dados com MySQL WorkbenchCriando um banco de dados com MySQL Workbench
Criando um banco de dados com MySQL Workbench
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
03 mer2
03 mer203 mer2
03 mer2
 
Estrutura de Dados - Ponteiros
Estrutura de Dados - PonteirosEstrutura de Dados - Ponteiros
Estrutura de Dados - Ponteiros
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a Objetos
 

Viewers also liked

Estruturas de dados dinâmicos em linguagem C
Estruturas de dados dinâmicos em linguagem CEstruturas de dados dinâmicos em linguagem C
Estruturas de dados dinâmicos em linguagem Cpjclima
 
Algoritmos e Estruturas de Dados, edição de 2013/2014
Algoritmos e Estruturas de Dados, edição de 2013/2014Algoritmos e Estruturas de Dados, edição de 2013/2014
Algoritmos e Estruturas de Dados, edição de 2013/2014Pedro Guerreiro
 
Material Algoritmos e Estruturas de Dados - 1º Bimestre
Material Algoritmos e Estruturas de Dados - 1º BimestreMaterial Algoritmos e Estruturas de Dados - 1º Bimestre
Material Algoritmos e Estruturas de Dados - 1º BimestreElaine Cecília Gatto
 
Estruturas de dados com C++ e STL
Estruturas de dados com C++ e STLEstruturas de dados com C++ e STL
Estruturas de dados com C++ e STLMarcos Castro
 
Livro Aberto Aprendendo a Programar na Linguagem C
Livro Aberto Aprendendo a Programar na Linguagem CLivro Aberto Aprendendo a Programar na Linguagem C
Livro Aberto Aprendendo a Programar na Linguagem CMarcos Quinho
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem Capolllorj
 
Livro Linguagem C - Completo
Livro Linguagem C - CompletoLivro Linguagem C - Completo
Livro Linguagem C - CompletoMarcos Quinho
 
Fundamentos da programação de computadores 2ª edição
Fundamentos da programação de computadores   2ª ediçãoFundamentos da programação de computadores   2ª edição
Fundamentos da programação de computadores 2ª ediçãoLeandro Rocha de Oliveira
 
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...SlideShare
 

Viewers also liked (9)

Estruturas de dados dinâmicos em linguagem C
Estruturas de dados dinâmicos em linguagem CEstruturas de dados dinâmicos em linguagem C
Estruturas de dados dinâmicos em linguagem C
 
Algoritmos e Estruturas de Dados, edição de 2013/2014
Algoritmos e Estruturas de Dados, edição de 2013/2014Algoritmos e Estruturas de Dados, edição de 2013/2014
Algoritmos e Estruturas de Dados, edição de 2013/2014
 
Material Algoritmos e Estruturas de Dados - 1º Bimestre
Material Algoritmos e Estruturas de Dados - 1º BimestreMaterial Algoritmos e Estruturas de Dados - 1º Bimestre
Material Algoritmos e Estruturas de Dados - 1º Bimestre
 
Estruturas de dados com C++ e STL
Estruturas de dados com C++ e STLEstruturas de dados com C++ e STL
Estruturas de dados com C++ e STL
 
Livro Aberto Aprendendo a Programar na Linguagem C
Livro Aberto Aprendendo a Programar na Linguagem CLivro Aberto Aprendendo a Programar na Linguagem C
Livro Aberto Aprendendo a Programar na Linguagem C
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
Livro Linguagem C - Completo
Livro Linguagem C - CompletoLivro Linguagem C - Completo
Livro Linguagem C - Completo
 
Fundamentos da programação de computadores 2ª edição
Fundamentos da programação de computadores   2ª ediçãoFundamentos da programação de computadores   2ª edição
Fundamentos da programação de computadores 2ª edição
 
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...
 

Similar to Estruturas de dados em Python

IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonDiogo Gomes
 
Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Luciano Ramalho
 
Palestra python
Palestra pythonPalestra python
Palestra pythonRony Cruch
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Luciano Ramalho
 
Programação Funcional (para humanos)
Programação Funcional (para humanos)Programação Funcional (para humanos)
Programação Funcional (para humanos)Pedro Castilho
 
Python em (mais de) 10 minutinhos
Python em (mais de) 10 minutinhosPython em (mais de) 10 minutinhos
Python em (mais de) 10 minutinhosRudá Moura
 
Haskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesarHaskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesarCRISLANIO MACEDO
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na práticaRafael Cassau
 
Introdução à Linguagem de programação Python
Introdução à Linguagem de programação PythonIntrodução à Linguagem de programação Python
Introdução à Linguagem de programação Pythondmmartins
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em PythonLuciano Ramalho
 
Técnicas de Programação Funcional
Técnicas de Programação FuncionalTécnicas de Programação Funcional
Técnicas de Programação FuncionalLambda 3
 
Por que dizemos que Scala é uma linguagem funcional?
Por que dizemos que Scala é uma linguagem funcional?Por que dizemos que Scala é uma linguagem funcional?
Por que dizemos que Scala é uma linguagem funcional?pmatiello
 

Similar to Estruturas de dados em Python (20)

IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
 
Python 02
Python 02Python 02
Python 02
 
Python Class
Python ClassPython Class
Python Class
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)
 
Palestra python
Palestra pythonPalestra python
Palestra python
 
R para Iniciantes
R para IniciantesR para Iniciantes
R para Iniciantes
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
 
Programação Funcional (para humanos)
Programação Funcional (para humanos)Programação Funcional (para humanos)
Programação Funcional (para humanos)
 
Python em (mais de) 10 minutinhos
Python em (mais de) 10 minutinhosPython em (mais de) 10 minutinhos
Python em (mais de) 10 minutinhos
 
Haskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesarHaskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesar
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na prática
 
Python
PythonPython
Python
 
Iteraveis e geradores
Iteraveis e geradoresIteraveis e geradores
Iteraveis e geradores
 
Introdução à Linguagem de programação Python
Introdução à Linguagem de programação PythonIntrodução à Linguagem de programação Python
Introdução à Linguagem de programação Python
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em Python
 
Haskell
HaskellHaskell
Haskell
 
Técnicas de Programação Funcional
Técnicas de Programação FuncionalTécnicas de Programação Funcional
Técnicas de Programação Funcional
 
Por que dizemos que Scala é uma linguagem funcional?
Por que dizemos que Scala é uma linguagem funcional?Por que dizemos que Scala é uma linguagem funcional?
Por que dizemos que Scala é uma linguagem funcional?
 
Haskell aula3 listas
Haskell aula3 listasHaskell aula3 listas
Haskell aula3 listas
 

Recently uploaded

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfSamaraLunas
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuisKitota
 

Recently uploaded (8)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 

Estruturas de dados em Python

  • 1. Estruturas de Dados em Python Ricardo Paiva (Senior Developer @ Globo.com)
  • 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"
  • 4. Listas (1) lista = [2, 1, 12, 1, 0] len(lista) # 5 lista[0] = 10 # [10, 1, 12, 1, 0] lista[0:2] # [10, 1] lista[:3] # [10, 1, 12] lista[3:] # [1, 0] lista[-1] # 0 (último elemento) lista[1:-1] # [1, 12, 1] 0 based e mutáveis Possuem ordem
  • 5. Listas (2) lista.append(20) # [10, 1, 12, 1, 0, 20] lista.extend([2, 3]) # [10, 1, 12, 1, 0, 20, 2, 3] lista[0:3] = [2] # [2, 1, 0, 20, 2, 3] lista + [4, 5] # [2, 1, 0, 20, 2, 3, 4, 5] lista.remove(20) # [2, 1, 0, 2, 3] lista.pop(0) # [1, 0, 2, 3, 4] 1 in lista # True lista.index(1) # 0 lista2 = list(lista) # copia a lista lista3 = lista[:] # também copia a lista
  • 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)]