List Comprehensions

Desde sua versão 2.0, Python oferece uma construção chamada list comprehensions, que é capaz de gerar listas de valores de forma bastante clara e concisa. Considere a notação matemática de conjunto, utilizada para descrever um conjunto composto pelo dobro de cada um dos números naturais de 0 até 9:

Tal notação descreve um conjunto de elementos através de propriedades que seus elementos devem satisfazer. A expressão acima pode também ser lida como:

S é um conjunto que contém como elementos os dobros de todos números naturais menores que 10.

Resultando no seguinte conjunto:

{0, 2, 4, 6, 8, 10, 12, 14, 16, 18}

Em Python, é possível descrevermos uma lista através de uma construção semelhante à notação matemática para descrição de conjuntos. Veja o exemplo abaixo, que apresenta tal construção, chamada de list comprehensions:

>>> S = [x*2 for x in range(0, 10)]
>>> print S
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

Como podemos ver, foi gerada uma lista com os quadrados dos números de 0 a 9. Ou seja, a expressão acima pode ser lida como:

Gere uma lista contendo o dobro de cada número inteiro na faixa de 0 a 9.

Também é permitido que sejam utilizadas expressões condicionais dentro de list comprehensions:

>>> S = [x*2 for x in range(0,10) if x % 2 == 0]
>>> print S
[0, 4, 8, 12, 16]

Ou seja, gere uma lista contendo o dobro de todo elemento x, sendo x um número entre 0 e 9, se x for um número par. O seguinte trecho de código obtém o mesmo resultado, sem a utilização de list comprehensions.

S = []
for x in range(0,10):
    if x % 2 == 0:
        S.append(x*2)

Apesar de inspirada na notação matemática, essa construção também pode ser utilizada para conjuntos não-numéricos:

>>> [s.capitalize() for s in ['um', 'dois', 'tres']]
['Um', 'Dois', 'Tres']

Também é possível gerar uma lista de listas como resultado:

>>> [[s.capitalize(), s.upper(), len(s)] for s in ['um', 'dois', 'tres']]
[['Um', 'UM', 2], ['Dois', 'DOIS', 4], ['Tres', 'TRES', 4]]

Ou então, uma lista de tuplas:

>>> [(s.capitalize(), s.upper(), len(s)) for s in ['um', 'dois', 'tres']]
[('Um', 'UM', 2), ('Dois', 'DOIS', 4), ('Tres', 'TRES', 4)]

Como você pode ver, a estrutura de list comprehensions é bastante flexível. Descubra mais detalhes em: http://docs.python.org/tutorial/datastructures.html#list-comprehensions

8 comentários sobre “List Comprehensions

  1. Pingback: map(), reduce(), filter() e lambda « Python Help
  2. Pingback: Dict comprehensions « Python Help
  3. Pingback: Generator Expressions « Python Help
  4. Pingback: Função zip em Python | Python Help
  5. Pingback: Brincando com Listas | Python Help
  6. Pingback: List Comprehension | LambrainLP
  7. Pingback: Link de Ajuda | LambrainPE
  8. Pingback: Como funcionam as listas de Python? | Python Help

Deixe um comentário