#列表推导式
# 旧的列表---》新的列表(不管是之前还是之后,都是一个列表,只是列表推导式会经过一些条件筛选后形成新的列表)'''
1.列表推导式: 格式1:[返回的东西 for 变量 in 旧列表]
格式2:[返回的东西 for 变量 in 旧列表 if 条件]
字典推导式
集合推导式
'''
#求出列表中人名长度小于等于3的元素,并添加到一个新列表
names=['tom','lily','abc','jack','steven','bob','q']
list1=[]for name in names:iflen(name)<=3:
list1.append(name)print(list1)
#用列表推导式的方法
#必须前后变量名相同,筛选后的每个元素赋值给第一个变量name
result=[name for name in names iflen(name)<=3]print(result)'''
['tom','abc','bob','q']['tom','abc','bob','q']'''
#将1-20之间能被3整除,组成一个新的列表
result=[i for i in range(1,21)if i%3==0]print(result)'''
[3,6,9,12,15,18]'''
#元组第一个数字为0-5之间的偶数,第二个数字为0-5之间的奇数
#[(偶数,奇数),(),()][(0,1),(0,3),(0,5),(2,1),(2,3)]
newlist =[(x,y)for x in range(6)if x%2==0for y in range(6)if y%2!=0]print(newlist)'''
[(0,1),(0,3),(0,5),(2,1),(2,3),(2,5),(4,1),(4,3),(4,5)]'''
#集合推导式
#旧集合--》新集合
set2={1,2,1,3,5,2,1,8,9,8,9,7}new={x for x in set2 if x>5}print(new)'''
{8,9,7}'''
#字典推导式
dict1={'a':'A','b':'B','c':'C','d':'C'}print(dict1.items())
newdict={value:key for key,value in dict1.items()}print(newdict)'''
dict_items([('a','A'),('b','B'),('c','C'),('d','C')]){'A':'a','B':'b','C':'d'}'''
生成器
#定义生成器得方式一 圆括号
'''
通过列表推导式,我们可以直接创建一个列表
但是,受到内存的限制,列表容量肯定是有限的
而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间
如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了
所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环过程中不断推算出后续的元素呢?
这样就不必创建完整的list,从而节省大量的空间
在python中,这种一边循环一边计算的机制,称为生成器
'''
#列表推导式
newlist =[x*3for x in range(20)if x<5]print(newlist)#[0,3,6,9,12]
#生成器用圆括号表示,#大括号有可能是集合推导式也可能是字典推导式,方括号是列表推导式,圆括号是生成器
g=(x*3for x in range(20)if x<5)print(type(g))#<class'generator'>
#得到元素的两种方式
print(g.__next__())print(g.__next__())print(next(g))print(next(g))'''
0369'''
print(next(g))
#下面一句超过了能取得范围
# print(next(g))'''
Traceback (most recent call last):
File "D:/pythonFile/hanshu/generatorr7/func03.py", line 31, in <module>print(next(g))
StopIteration
'''
#定义生成器得方式二 函数
#只要函数中出现yield关键字,说明这是个生成器而不是一个函数
'''
步骤:
1.定义一个函数,函数中使用yield关键字
2.调用函数,接收调用得结果
3.得到得结果就是生成器g
4.借助于next(g)/g.__next__()得到元素
'''
def func():
n=0while True:
n+=1
yield n #==>return n+暂停程序
# 第一次到这他会返回n然后暂停自己,去执行print(g.__next__()),然后又回来继续这个while循环,实现n+=1
g=func() #调用函数,函数返回一个生成器
print(g)print(g.__next__())print(next(g))'''
<generator object func at 0x00000286E1B25AF0>12'''
列表推导式#列表推导式# 旧的列表---》新的列表(不管是之前还是之后,都是一个列表,只是列表推导式会经过一些条件筛选后形成新的列表)'''1.列表推导式: 格式1:[返回的东西 for 变量 in 旧列表] 格式2:[返回的东西 for 变量 in 旧列表 if 条件]字典推导式集合推导式'''#求出列表中人名长度小于等于3的元素,并添加到一个新列表names=['tom','lily','abc','jack','steven','bob','q']li