python_解析式和生成器表达式

一、列表解析List Comprehension

       语法:

                返回值for元素in可迭代对象if条件

                使用中括号[],内部是for循环,if条件语句可选

                返回一个新的列表

        列表解析式作用:

                编译器会优化,不会因为简写而影响效率,反而因优化提高效率

                减少程序员工作量,减少出错

                简化代码,可读性增强

例:

获取10以内的偶数

even1=[]

for x in range(10):

    if x%2==0:

        even1.append(x)

even2=[i for i in range(10) if i%2==0]

print(even1,even2)

二、列表解析进阶

表达式:【expr for i in iterable1 for in iterable2】

等价于

ret=[]

for i in iterable1:

        for j in iterable2:

                ret.append(expr)

举例

[(x,y) for x in 'abcd' for y in range(3)]

[[x,y] for x in 'abcd' for y in range(3)]

[{x,y} for x in 'abcd' for y in range(3)]

[(i,j) for i in range(7) if i>4 for j in range(20,25) if j>23]

[(i,j) for i in range(7) for j in range(20,25) if i>4 if j>23]

[(i,j) for i in range(7) for j in range(20,25) if i>4 and j>23]

注:列表解析不支持elif,多个if相当于用and连接

三、生成器表达式Generator expession

语法:

        (返回值 for 元素 in 可迭代对象 if 条件)

        列表解析式的中括号换成小括号就行

        返回一个生成器

和列表解析式的区别:

        1.生成器表达式是按需计算(或称惰性计算、延迟计算),需要的时候才计算值;列表解析式

        是立即返回值

        2.生成器表达式是返回迭代器可以迭代;列表解析式返回的不是迭代器,返回可迭代列表

        3.生成器从头到后走完一遍后,不能回头;列表解析式可以重复走

生成器

        可迭代对象

        迭代器

四、集合解析式

语法

        {返回值for元素in 可迭代对象 if条件}

        列表解析式的中括号换成大括号{}就行

        立即返回一个集合

例:

        {(x,x+1) for x i in range(10)}

五、字典解析式

语法

        {返回值for元素in 可迭代对象 if条件}

        列表解析式的中括号换成大括号{}就行

       使用key:value形式

        立即返回一个字典

例:

        {str(x):(y,4) for x  in range(4) for y in range(4)}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值