5.1.4 List Comprehensions

A compreensão de listas fornece uma maneira concisa de criar listas sem recorrer ao uso de map(), filter() e/ou lambda. A definição de lista resultante costuma ser mais clara do que as listas construídas usando essas construções. Cada compreensão de lista consiste em uma expressão seguida por uma cláusula for, em seguida, zero ou mais cláusulas if. O resultado será uma lista resultante da avaliação da expressão no contexto das cláusulas for e if que a seguem. Se a expressão fosse avaliada como uma tupla, ela deve ser entre parênteses.

>>> freshfruit = ['  banana', '  loganberry ', 'plum  ']
>>> [weapon.strip() for weapon in freshfruit]
['banana', 'loganberry', 'plum']
>>> vec = [2, 4, 6]
>>> [3*x for x in vec]
[6, 12, 18]
>>> [3*x for x in vec if x > 3]
[12, 18]
>>> [3*x for x in vec if x >> [[x,x**2] for x in vec]
[[2, 4], [4, 16], [6, 36]]
>>> [x, x**2 for x in vec]	# error - need () for tuples
  File "", line 1, in ?
    [x, x**2 for x in vec]
               ^
SyntaxError: invalid syntax
>>> [(x, x**2) for x in vec]
[(2, 4), (4, 16), (6, 36)]
>>> vec1 = [2, 4, 6]
>>> vec2 = [4, 3, -9]
>>> [x*y for x in vec1 for y in vec2]
[8, 6, -18, 16, 12, -36, 24, 18, -54]
>>> [x+y for x in vec1 for y in vec2]
[6, 5, -7, 8, 7, -5, 10, 9, -3]
>>> [vec1[i]*vec2[i] for i in range(len(vec1))]
[8, 12, -54]

As compreensões de lista são muito mais flexíveis que o map() e podem ser aplicadas a expressões complexas e funções aninhadas:

>>> [str(round(355/113.0, i)) for i in range(1,6)]
['3.1', '3.14', '3.142', '3.1416', '3.14159']
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s