![Page 2: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/2.jpg)
List Comprehension
• Jeitosucinto decriarlistasbaseando-seemlistasexistentes
• Maneiraelegante• Menoslinhasdecódigo• Maneira deser mais pythônico
• Você consegue omesmo resultado sem listcomprehension
![Page 3: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/3.jpg)
Exemplo 1
• Querosepararasletrasdeumastring emumalista
frase = "paralelepipedo”lista = []for letra in frase:
lista.append(letra)print(lista)
![Page 4: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/4.jpg)
• Querosepararasletrasdeumastring emumalista
frase = "paralelepipedo”lista = []for letra in frase:
lista.append(letra)print(lista)
['p', 'a', 'r', 'a', 'l', 'e', 'l', 'e', 'p', 'i', 'p', 'e', 'd', 'o']
Exemplo 1
![Page 5: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/5.jpg)
Exemplo 1
• Querosepararasletrasdeumastring emumalistacomlistcomprehension
frase = "paralelepipedo”lista = [letra for letra in frase]print(lista)
![Page 6: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/6.jpg)
Exemplo 1
• Querosepararasletrasdeumastring emumalistacomlistcomprehension
frase = "paralelepipedo”lista = [letra for letra in frase]print(lista)
['p', 'a', 'r', 'a', 'l', 'e', 'l', 'e', 'p', 'i', 'p', 'e', 'd', 'o']
![Page 7: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/7.jpg)
List Comprehension
• Ideia geral
umaLista = [x for x in iterável]
![Page 8: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/8.jpg)
List Comprehension
• Ideia geral
umaLista = [x for x in iterável]
Listas, strings e tuplas
![Page 9: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/9.jpg)
Exemplo 2
• Queroformarumalistanovaapartirdeumalistaantiga,excluindoosnúmeros pares
lista = [x for x in listaOriginal if x % 2 !=0]
![Page 10: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/10.jpg)
Exemplo 2
• Queroformarumalistanovaapartirdeumalistaantiga,excluindoosnúmeros pares
lista = [x for x in listaOriginal if x % 2 !=0]
Checagem de condição
![Page 11: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/11.jpg)
Exemplo 3
• Quero uma lista comtodos os caracteres deuma stringemmaiúsculo
• Pensando…• Listcomprehensionpra obter os caracteres• Depois faço iteração pra transformar todos emmaiúsculos
![Page 12: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/12.jpg)
Exemplo 3
• Quero uma lista comtodos os caracteres deuma stringemmaiúsculo• Você pode fazertudo deuma única vez!
lista = [x.upper() for x in frase]
![Page 13: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/13.jpg)
Exemplo 3
• Quero uma lista comtodos os caracteres deuma stringemmaiúsculo• Você pode fazertudo deuma única vez!
lista = [x.upper() for x in frase]
Lembre-se: strings são imutáveis!
![Page 14: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/14.jpg)
Exemplo 4
• Quero uma lista comofatorial detodos os números ímpares deuma listaoriginal• Listcomprehension+função+if
![Page 15: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/15.jpg)
Exemplo 4
• Quero uma lista comofatorial detodos os números ímpares deuma listaoriginal• Listcomprehension+função+if
import mathlista = [math.factorial(x) for x in listaOriginal if x % 2 != 0]
![Page 16: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/16.jpg)
Exemplo 5
• Quero todos os números ímpares de1a100
![Page 17: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/17.jpg)
Exemplo 5
• Quero todos os números ímpares de1a100
• Preciso criar entãouma lista comos números de1a100edepoisusar listcomprehension+if?
![Page 18: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/18.jpg)
Exemplo 5
• Quero todos os números ímpares de1a100
lista = [x for x in range(1,100,2)]
![Page 19: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/19.jpg)
Exemplo 5
• Quero todos os números ímpares de1a100
lista = [x for x in range(1,100,2)]
![Page 20: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/20.jpg)
Exemplo 5
• Quero todos os números ímpares de1a100
lista = [x for x in range(1,100,2)]
Início: opcionalSe omitido, considera-se zero
![Page 21: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/21.jpg)
Exemplo 5
• Quero todos os números ímpares de1a100
lista = [x for x in range(1,100,2)]
Limite: ObrigatórioNão será incluído
![Page 22: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/22.jpg)
Exemplo 5
• Quero todos os números ímpares de1a100
lista = [x for x in range(1,100,2)]
Salto: OpcionalSe omitido, igual a 1
![Page 23: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/23.jpg)
Exemplo 6
• Quais são os números entre1e100divisíveispor 3epor 5?
![Page 24: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/24.jpg)
Exemplo 6
• Quais são os números entre1e100divisíveispor 3epor 5?
lista = [x for x in range(1,101) if (((x % 3)==0) and ((x%5)==0))]
![Page 25: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/25.jpg)
Exemplo 6
• Quais são os números entre1e100divisíveispor 3epor 5?
lista = [x for x in range(1,101) if (((x % 3)==0) and ((x%5)==0))]
Expressãológica
![Page 26: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/26.jpg)
Exemplo 6
• Quais são os números entre1e100divisíveispor 3epor 5?
lista = [x for x in range(1,101) if ((x % 3)==0) if ((x%5)==0)]
![Page 27: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/27.jpg)
Exemplo 6
• Quais são os números entre1e100divisíveispor 3epor 5?
lista = [x for x in range(1,101) if ((x % 3)==0) if ((x%5)==0)]
Ifs aninhados
![Page 28: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/28.jpg)
Exemplo 7
• Faça uma lista comnúmeros de1a100em que:• Seonúmero forpar,armazene oseu cubo• Em caso contrário,armazene oseu quadrado
• Noção deif-else
![Page 29: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/29.jpg)
Exemplo 7
• Faça uma lista comnúmeros de1a100em que:• Seonúmero forpar,armazene oseu cubo• Em caso contrário,armazene oseu quadrado
lista = [x**3 if (x%2 ==0) else x**2 for x in range(1,101)]
![Page 30: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/30.jpg)
Exemplo 7
• Faça uma lista comnúmeros de1a100em que:• Seonúmero forpar,armazene oseu cubo• Em caso contrário,armazene oseu quadrado
lista = [x**3 if (x%2 ==0) else x**2 for x in range(1,101)]
![Page 31: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/31.jpg)
Exemplo 8
• Listcomprehensionem loopsaninhados
lista = []for x in [20, 40, 60]:
for y in [2, 4, 6]: lista.append(x * y)
print(lista)
![Page 32: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/32.jpg)
Exemplo 8
• Listcomprehensionem loopsaninhados
lista = []for x in [20, 40, 60]:
for y in [2, 4, 6]: lista.append(x * y)
print(lista)
[40, 80, 120, 80, 160, 240, 120, 240, 360]
![Page 33: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/33.jpg)
Exemplo 8
• Listcomprehensionem loopsaninhados
lista = [x * y for x in [20, 40, 60] for y in [2, 4, 6]]
[40, 80, 120, 80, 160, 240, 120, 240, 360]
![Page 34: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/34.jpg)
Exemplo 9
• Às vezes temos duas listas demesmo tamanho (sincronizadas)• Queremosmapear os elementosdeuma lista paraoutra• Ideia dedicionário
# Quantas pessoas cada uma convidou para o pyladieslista1 = [“Jessica”,”Juliany”,”Elloa”,”Daniele"]lista2 = [15, 17, 10, 22]
![Page 35: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/35.jpg)
Exemplo 9
• Às vezes temos duas listas demesmo tamanho (sincronizadas)• Queremosmapear os elementosdeuma lista paraoutra• Ideia dedicionário# Quantas pessoas cada uma convidou para o pyladieslista1 = [“Jessica”,”Juliany”,”Elloa”,”Daniele"]lista2 = [15, 17, 10, 22]d= {}for i in range(len(lista1)):
d[lista1[i]] = lista2[i]print(d)
![Page 36: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/36.jpg)
Exemplo 9
• Às vezes temos duas listas demesmo tamanho (sincronizadas)• Queremosmapear os elementosdeuma lista paraoutra• Ideia dedicionário# Quantas pessoas cada uma convidou para o pyladieslista1 = [“Jessica”,”Juliany”,”Elloa”,”Daniele"]lista2 = [15, 17, 10, 22]d= {}for i in range(len(lista1)):
d[lista1[i]] = lista2[i]print(d)
{'Jessica': 15, 'Daniele': 22, 'Juliany': 17, 'Elloa': 10}
![Page 37: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/37.jpg)
Exemplo 9
• Às vezes temos duas listas demesmo tamanho (sincronizadas)• Queremosmapear os elementosdeuma lista paraoutra• Ideia dedicionário
# Quantas pessoas cada uma convidou para o pyladieslista1 = ["Jessica","Juliany","Elloa","Daniele"]lista2 = [15, 17, 10, 22]d = {lista1[i]: lista2[i] for i in range(len(lista1))}print(d)
{'Jessica': 15, 'Daniele': 22, 'Juliany': 17, 'Elloa': 10}
![Page 38: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/38.jpg)
Exemplo 10
• Umexemplo interessantecomstrings• Determinar quais stringsdeuma listas são palíndromas• Pense comlistcomprehension!
![Page 39: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/39.jpg)
Exemplo 10
• Umexemplo interessantecomstrings• Determinar quais stringsdeuma listas são palíndromas• Pense comlistcomprehension!
novaLista = [x for x in lista if x == x[::-1]]
![Page 40: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/40.jpg)
Exemplo 9
• Umexemplo interessantecomstrings• Determinar quais stringsdeuma listas são palíndromas• Pense comlistcomprehension!
novaLista = [x for x in lista if x == x[::-1]]
Fatiamento da string
![Page 41: Seja mais Pythonico: ˆ List Comprehension · ListComprehension • Jeito sucintode criar listas baseando-se em listas existentes • Maneira elegante • Menos linhas de código](https://reader033.vdocuments.com.br/reader033/viewer/2022060508/5f23f2dca1fcfb24da76485c/html5/thumbnails/41.jpg)
Finalizando...
• Listcomprehension:umamaneira deser mais pythônico!• Menos linhas decódigo• Aproxima danotação matemática• Melhoria na legibilidade
• Autores argumentamque há melhoriasnotempodeexecução• ~35%mais rápido que laços comfor• ~45%mais rápido que laços commap