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