列表解析(list comprehension)
语法:[expr for iter_item in iterable if cond_expr]

1. 生成列表
>>> print [i for i in range(10) if i % 2 == 0]
[0, 2, 4, 6, 8]

2. 生成元组
>>> print tuple(i for i in range(10) if i % 2 == 0)
(0, 2, 4, 6, 8)

3. 生成集合
>>> print {i for i in range(10) if i % 2 == 0}
set([0, 8, 2, 4, 6])

4. 生成迭代器对象
>>> print (i for i in range(10) if i % 2 == 0)
<generator object <genexpr> at 0x0000000002A946C0>
>>> for y in (i for i in range(10) if i % 2 == 0): print y
0
2
4
6
8

为什么推荐使用列表解析来生成列表呢?

  • 使用列表解析更为直观清晰,代码更为简洁。
  • 列表解析的效率更高。

 


print [x ** 2 for x in range(10)]
print list(map(lambda x: x ** 2, range(10)))

程序输出:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]