List Comprehensions 链表推导式

Posted on 2011-07-14 23:36  仆本浪人  阅读(148)  评论(0编辑  收藏  举报

链表推导式提供了一个创建链表的简单途径,无需使用 map(), filter() 以及 lambda 。返回链表的定义通常要比创建这些链表更清晰。每一个链表推导式包括在一个 for 语句之后的表达式,零或多个 for或if语句。返回值是由 for 或 if 子句之后的表达式得到的元素组成的链表。如果想要得到一个元组,必须要加上括号。

1 >>> vec = [2, 4, 6]
2 >>> [3*x for x in vec]
3 [6, 12, 18]

  

1 >>> [3*x for x in vec if x > 3]
2 [12, 18]

  

>>> [3*x for x in vec if x < 2]
[]

  

1 >>> [[x,x**2] for x in vec]
2 [[2, 4], [4, 16], [6, 36]]

  

>>> [x, x**2 for x in vec]  # error - parens required for tuples
File "<stdin>", 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]

  

链表推导式比 map()更复杂,可调用多个参数和嵌套函数。

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