码迷,mamicode.com
首页 > 编程语言 > 详细

python高级特征:列表生成式;generator, 迭代器。

时间:2019-11-03 18:11:29      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:dict   分层   多个   ==   高级特性   使用   数组   很多   list   

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())

 

python高级特征:列表生成式;generator, 迭代器。

标签:dict   分层   多个   ==   高级特性   使用   数组   很多   list   

原文地址:https://www.cnblogs.com/chentianwei/p/11788208.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!