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”