15.生成器的表达式和各种数据推导式
生成器表达式:
列表推导式
把每次循环时想放入列表的数据形式放在for 语句之前,就能够实现列表推导式
egg_list=['鸡蛋%s'%i for i in range(10)]
print(egg_list)
执行结果:
['鸡蛋0', '鸡蛋1', '鸡蛋2', '鸡蛋3', '鸡蛋4', '鸡蛋5', '鸡蛋6', '鸡蛋7', '鸡蛋8', '鸡蛋9']
结果与如下代码相同:
egg_list= [] for i in range(10): egg_list.append('鸡蛋%s'%i)
生成器表达式
g=(i for i in range(10)) #g为生成器 g.__next__()
第一行拿到生成器g时,for语句一次都没有执行,后面没执行一次。__next__()函数,for语句循环执行一次
生成器表达式与列表推导式的区别:
1.列表推导式使用的符号为[],生成器表达式使用的符号是()
2,返回值不一样,列表推导式返回一个列表,占用内存,生成器表达式返回一个生成器,不占用内存
列表推导式,字典推导式,集合推导式:
列表推导式:
列表推导式的两种形式:
1.[每一个元素或者是和元素相关的操作 for 元素 in 可迭代数据类型] #便利之后挨个处理
2.[满足条件的元素的相关操作 for 元素 in 可迭代数据类型 if 元素相关的条件] #这种形式具有筛选功能
以上两种形式中,第二种才是完整的列表推导式。
列表推导式习题:
1.返回一个列表中含有30以内能被3整除的数:
a=[i for i in range(31) if i%3==0] print(a)
执行结果:
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
2.返回一个列表中含有30以内能被3整除的数的平方
a=[i**2 for i in range(31) if i%3==0] print(a)
执行结果:
[0, 9, 36, 81, 144, 225, 324, 441, 576, 729, 900]
3.返回嵌套列表中名字中含有两个‘e'的名字
c=[['tom','billy','jefferson','andrew','joe'],['alice','jill','ana','wendy']] a=[j for i in c for j in i if j.count('e')==2] print(a)
执行结果:
['jefferson']
字典推导式
将一个字典的key和value对调
dic={'a':10,'b':34}
new_dic={dic[k]:k for k in dic}
print(new_dic)
执行结果:
{10: 'a', 34: 'b'}
集合推导式
注意:{}数据不能重复。使用方法与列表差不多,多了自带的去重功能
set={x*x for x in [1,-1,2]}
print(set)
执行结果:
{1, 4}

浙公网安备 33010602011771号