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上面的列表生成式??。
> (1...11).to_a.map{|x| x * x}.select {|x| x % 2== 0} => [4, 16, 36, 64, 100]
Ruby的each功能很强大:可以替代上面for接收多个变量的情况。
Ruby的for..in..功能同样可以做到上面Python的功能:??还更简便,无需调用items(),
> for k,v in d > puts "#{k}=#{v}" > end x=A y=B z=C
Python测试:
请修改列表生成式,通过添加if
语句保证列表生成式能正确地执行:
L1 = [‘Hello‘, ‘World‘, 18, ‘Apple‘, None] L2 = [x.lower() for x in L1 if isinstance(x, str)] >>> L2 >[‘hello‘, ‘world‘, ‘apple‘]
解释: 就是简化写法,没别的。 经常用一看就直到。太复杂的还是分开写,便于后续维护代码。毕竟视觉上,分层容易理解。
L1 = [‘Hello‘, ‘World‘, 18, ‘Apple‘, None] L2 = [] for x in L1: if isinstance(x, str): L2.append(x.lower())
原文地址:https://www.cnblogs.com/chentianwei/p/11788208.html
时间: 2024-10-09 06:24:06