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}

 

posted @ 2020-10-13 19:58  maday  阅读(109)  评论(0)    收藏  举报