python的推导式+生成器

推导式分为三种:1,list推导式

                             2,dict推导式

                             3,set推导式 

这是python中特有的语法,实质上是从一个数据中构建另外一个新的数据序列的结构体。

一,列表推导式 

 list推导式[  添加到新盒子的内容   for      某变量   in        可迭代对象    ]

例题:生成一个[0.5,1.0,1.5,2.0,2.5,and so on,10.0]的列表

li_1=[i/2 for i in range(1,21)]
print(li_1)

简单的一行代码就可以完成

紧接着第二个问题:“将li_2=[6,2,6,7,-15,8,-17,-10,-15,-4]中小于0的数字进行平方再存储到一个新列表之中”

li_3=[i**2  for i in li_2 if i<0]
print(li_3)

这样就可以了,通过这个例子,我们知道了在推导式中还可以添加条件来选择元素

那如果我们需要同时在两个列表中分别选择他的元素呢?

例题:li_4=["abc"]   li_5=["123“]将这两个列表组合起来形成[ '1a','1b','1c',and so on ,'2c','3c']

当我们不知道可以用列表推导式做时,只能使用嵌套循环

for i in li_4:
    for x in li_5:
        print(i+x)

但是当我们掌握了列表推导式之后,就可以简化这一部分代码

[i+x for i in li_4   for x in li_5]

并且这个嵌套可以无限增加

二,字典推导式

{key:value for 变量名 in 数据结构}

eg:实现将列表li_6=['age','name','gender']之中的元素和他的索引形成字典的形式

dic={i:li_6.index(i) for i in li_6 }
print(dic)

输出为

{'age':'0',"name":"1","gender":"2"}

三,集合推导式

{   添加到新盒子的内容   for      某变量   in        可迭代对象 }

例题:实现10个0到100的随机元素,并且去重

import random
s1={random.randint(1,100)  for i in range(10) }
print(s1)

四,生成器

为什么会有生成器?

[0,1,2,3,4,5,and so on,n]

这个列表占内存巨大,但是如果只是访问其中的几个,后面的内存就会被浪费,生成器的出现便会在循环的过程中根据算法不断地推出后续的元素,就不会管创建出一个完整的列表从而节省内存了空间。

生成器的创建来自于迭代器和推导式的结合【不懂迭代器的朋友可以看看下面这篇文章优快云icon-default.png?t=M85Bhttps://mp.youkuaiyun.com/mp_blog/creation/editor/127343089

其表达形式为(  添加到新盒子的内容   for      某变量   in        可迭代对象

生成器和迭代器相同不通过索引取值,而是通过next()方法取值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

下水道程序员

你的鼓励将是我奋斗的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值