推导式分为三种: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]
这个列表占内存巨大,但是如果只是访问其中的几个,后面的内存就会被浪费,生成器的出现便会在循环的过程中根据算法不断地推出后续的元素,就不会管创建出一个完整的列表从而节省内存了空间。
生成器的创建来自于迭代器和推导式的结合【不懂迭代器的朋友可以看看下面这篇文章优快云https://mp.youkuaiyun.com/mp_blog/creation/editor/127343089】
其表达形式为( 添加到新盒子的内容 for 某变量 in 可迭代对象)
生成器和迭代器相同不通过索引取值,而是通过next()方法取值