博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
生成器表达式
阅读量:5293 次
发布时间:2019-06-14

本文共 2023 字,大约阅读时间需要 6 分钟。

列表推导式:

通过列表y得到列表x:

y = [1,2,3,4,5,6,7,8]

x = [1,4,9,16,25,36,49,64]

一般我们会这么做:

x = []

for i in y:
    x.append(i*i)
print(x)

 列表推导式:

y = [1,2,3,4,5,6,7,8]

x = [i*i for i in y]

print(x)

再看一个例子:

range(100)

x2 = [i/2 for i in range(100)]
print(x2)

生成器表达式:

x = [i*i for i in y]print(x)g = (i*i for i in y) print(g) print(list(g)) for i in g: print(i)

老母鸡的例子:

#老男孩由于峰哥的强势加盟很快走上了上市之路,alex思来想去决定下几个鸡蛋来报答峰哥egg_list=['鸡蛋%s' %i for i in range(10)] #列表解析#峰哥瞅着alex下的一筐鸡蛋,捂住了鼻子,说了句:哥,你还是给我只母鸡吧,我自己回家下laomuji=('鸡蛋%s' %i for i in range(10))#生成器表达式print(laomuji)print(next(laomuji)) #next本质就是调用__next__print(laomuji.__next__())print(next(laomuji))

l = ['鸡蛋%s'%i for i in range(10)]

# print(l)
laomuji = ('鸡蛋%s'%i for i in range(10))
for egg in laomuji:
    print(egg)

各种推导式:

new_l = []

for i in range(30):
    if i%3 == 0:
        new_l.append(i)
print(new_l)

 

# print(list(range(0,30,3)))

# print([i for i in range(30) if i%3 == 0])
# [i*i for i in range(30) if i%3 == 0]
# def square(x):
#     return x*x
# [square(i) for i in range(30) if i%3 == 0]

 

# names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],

#          ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
# ret = (name for name_lst in names for name in name_lst if name.count('e') >= 2)
# print(ret)

# 不利于代码可读,但是代码简洁

 

# mcase = {'a': 10, 'b': 34} # mcase_frequency = {mcase[k]:k for k in mcase} # print(mcase_frequency)

# mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3} # mcase_frequency = {k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0) for k in mcase} # print(mcase_frequency)

squared = {x**2 for x in [1, -1, 2]}   #{1,4} print(squared) # Output: set([1, 4])     

面试题:

def demo():    for i in range(4):        yield ig=demo()   # 生成器g1=(i for i in g) #生成器g2=(i for i in g1) #g2 生成器# print(list(g1))   #[0,1,2,3]print(list(g2))

总结:

1.把列表解析的[]换成()得到的就是生成器表达式

2.列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存

3.Python不但使用迭代器协议,让for循环变得更加通用。大部分内置函数,也是使用迭代器协议访问对象的。例如, sum函数是Python的内置函数,该函数使用迭代器协议访问对象,而生成器实现了迭代器协议,所以,我们可以直接这样计算一系列值的和:

 

转载于:https://www.cnblogs.com/biluo/p/7862572.html

你可能感兴趣的文章
ubuntu 16.04 开机脚本
查看>>
 VS2012 C#调用C++ dll
查看>>
TCL:表格(xls)中写入数据
查看>>
SQL SERVER 2005中如何获取日期(一个月的最后一日、一年的第一日等等)
查看>>
django 学习笔记(转)
查看>>
控制台程序秒变Windows服务(Topshelf)
查看>>
字节流与字符流的区别详解
查看>>
20141026--娱乐-箱子
查看>>
自定义分页
查看>>
Oracle事务
查看>>
任意输入10个int类型数据,把这10个数据首先按照排序输出,挑出这些数据里面的素数...
查看>>
String类中的equals方法总结(转载)
查看>>
图片问题
查看>>
bash使用规则
查看>>
AVL数
查看>>
第二章练习
查看>>
ajax2.0
查看>>
C#时间截
查看>>
C语言程序设计II—第九周教学
查看>>
C# 获取系统时间及时间格式转换
查看>>