首页 > 其他 > 详细

列表推导式/生成器生成式

时间:2020-02-07 12:09:45      阅读:84      评论:0      收藏:0      [点我收藏+]

   #列表推导式:

1 = [] 
for num in range(1,101):
    l1.append(num)
print(1)
#将上述for循环用列表表达式改写
l  = [i for i in range(1,101)]
#列表推导式的两个形式:循环模式、筛选模式
#循环模式:遍历每一个元素,加工后依次存入列表,
#[②变量(加工后的变量) ①for 变量 in iterable]
l1 = [f{i}个小朋友 for i in range(1,15)]
print(l1)

 

#筛选模式:遍历每一个元素,判断加工后依次存入列表。
[③变量(加工后的变量) ①for 变量 in iterable ②if条件]
l3 = [i for i in range(1,31) if i%2==0]
print(l3)

 

#课堂练习:
#课堂练习1:三十以内可以被三整除的数:
l4 = [i for i in range(1,31) if i%3==0]
#课堂练习2:三十以内可以被三整除的平方
l5 = [i*i for i in range(1,31) if i%3==0]
#课堂练习3:找到嵌套列表中名字含有两个‘e’的所有名字
names = [[Tom, Billy, Jefferson, Andrew, Wesley, Steven, Joe],
         [Alice, Jill, Ana, Wendy, Jennifer, Sherry, Eva]]
#注意最后留下的是筛选后的变量j
l6 = [ j for i in names for j in i if j.count(e)==2]
print(l5)
#上述代码等价于:
for i in names:
    for j in i:
        if j.count(e)==2:
            print(j) 

 

#生成器表达式:
生成器表达式和列表推导式构建上的唯一区别,就是将列表推导式的[]换成了().
对于生成数据量比较大的对象,考虑用生成器表达式,节省内存。
对于生成数据量比较小的对象,考虑用列表推导式,节省内存。
# 生成器表达式:将列表推导式的 []  换成() 即可。
g = (i for i in range(100000000000))  #生成一个生成器对象
print(g) #<generator object <genexpr> at 0x0000023D7B0DCC50>
print(g.__next__()) #0
print(g.__next__())  #1
print(g.__next__())  #2

 

#字典推导式:
#完成字典mcase中键值的对调
mcase = {a: 10, b: 34}
mcase_frequency = {mcase[k]: k for k in mcase} #K是键 产生一个新的字典
print(mcase_frequency) #{10: ‘a‘, 34: ‘b‘}

 

#集合推导式:
squared = {x**2 for x in [1, -1, 2]} #注意集合和字典一样都是花括号
print(squared) # {1, 4} 集合的互异性






------------恢复内容结束------------

列表推导式/生成器生成式

原文:https://www.cnblogs.com/labiii-home/p/12271748.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!