villares / material-aulas

Material para ensino introdutório de programação com Python em um contexto visual
https://abav.lugaralgum.com/material-aulas/
97 stars 70 forks source link

Abrangência ou compreensão de listas (list comprehension) e afins #95

Closed villares closed 3 years ago

villares commented 3 years ago

É muito comum em Python ver o seguinte padrão, que usa um laço de repetição para construir, ou popular, uma lista:

nova_lista = []
for «valor» in «iterável»:
      resultado.append(«novo_elemento»)  # o novo elemento é calculado a partir do valor

É possível ainda "filtrar", usar uma condição que permite ou não produzir novos elementos.

nova_lista = []
for «valor» in «iterável»:
    if  «condição»:  # a condição depende do valor
        resultado.append(«novo_elemento»)  # o novo elemento depende do valor

Isso pode ser reescrito da seguinte maneira:

nova_lista = [«novo_elemento» for «valor» in «iterável» if «condição»]
# o primeiro padrão, sem a condição, é apenas [«novo_elemento» for «valor» in «iterável»]

Vamos ver um exemplo concreto

divisivel_por_3 = []
for n in range(1000):
    if n % 3 == 0:
        divisivel_por_3.append(n)

divisivel_por_3 = [n for n in range(1000) if n % 3 == 0]

Expressões geradoras (generator expressions) também!

Vide Pense em Python: Abrangência de listas https://github.com/villares/PensePython2e/blob/master/docs/19-extra.md#192---abrang%C3%AAncia-de-listas Expressões geradoras https://github.com/villares/PensePython2e/blob/master/docs/19-extra.md#193---express%C3%B5es-geradoras

villares commented 3 years ago

https://github.com/villares/material-aulas/blob/main/Processing-Python/comprehension.md