
Python高级特性
- 列表生成式:不过一种语法糖
- 生成器:不过一个方法
- 迭代器:
列表生成式
Python内置的函数,来创建list。
简单的生成:
>>> list(range(1,11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
复杂的生成:增加一个for循环。
>>> a = [x*x for x in range(1, 11)]
>>> a
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
还可以在for循环后加if判断,这样对循环后的所有元素进行整除,得到符合条件的一组元素,返回的是list。
>>> a = [x*x for x in range(1, 11) if x%2 == 0]
>>> a
[4, 16, 36, 64, 100]
还可以套用两层for循环
>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
for循环可以同时接收多个变量。比如dict的items()方法:
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> for k, v in d.items():
... print(k, '=', v)
...
x = A
y = B
z = C
>>> d.items()
dict_items([('x', 'A'), ('y', 'B'), ('z', 'C')])
小结:
list生成式:
[表达式/0~n个变量 for 0~n个变量 in list/dict/相关变体]
本质就是使用循环和条件语句对list/dict进行筛选:
[表达式/变量 条件/循环语句 条件/循环语句]
Ruby类似的方法糖。
Ruby没有列表生成式,但有很多语法糖,来操作array对象。
range对象使用to_a转化为数组。
> (1...11).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
乘方后,增加一个判断:等同Python上面的列表生成式