博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 生成器和各种推导式
阅读量:4930 次
发布时间:2019-06-11

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

##################################总结###############################

什么是迭代器?

  可迭代对象通过__iter__()可以转换成迭代器,满足迭代器协议。

  内部含有__iter__且__next__方法的就是迭代器。

# l = [1, 2, 3]

# l_obj = l.__iter__()
# print(l_obj)

迭代器的取值两种方法:
l = [1, 2, 3]l_obj = l.__iter__()print(l_obj)------------------
方法一:__next__()print(l_obj.__next__())-------------1print(l_obj.__next__())-------------2print(l_obj.__next__())-------------3方法二 for循环for i in l_obj: print(i)print('__next__' in dir(l_obj))-------------1        2        3        True

第二种判断方法:

from collections import Iterable

from collections import Iterator
print(isinstance('123', Iterable))
print(isinstance('123', Iterator))

迭代器:

  1,节省内存

  2,满足惰性机制

  3,取值过程单向不可逆(一条路走到黑)

生成器

生成器函数中包含 yield , 返回数据和return差不多.        return 会立即结束这个函数的执行        yield 可以分段的执行一个函数        生成器函数在执行的时候返回生成器. 而不是直接执行此函数        能向下执行的两个条件:            __next__(), 执行到下一个yield            send(), 执行到下一个yield, 给上一个yield位置传值        所有的生成器都是迭代器都可以直接使用for循环        都可以使用list()函数来获取到生成器内所有的数据        生成器中记录的是代码而不是函数的运行        def func():            print("我的天哪 ")            yield "宝宝"        gen = func() # 创建生成器.  此时运行会把生成器函数中的代码记录在内存        当执行到__next__(), 运行此空间中的代码, 运行到yield结束.
def func():    print("1111")    yield "林志颖"    print('22222')    yield "周润发"    print('33333')ret=func()print("返回值是",ret)#返回值是 
print(ret.__next__())#1111 林志颖print(ret.__next__())#22222 周润发# print(ret.__next__())

##################################作业#############################

(1)过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母
lst=['qwe1','ert','oo']lse2=[i.upper() for i in lst if len(i) >3]print(lse2)
(2)求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元祖列表
li=[(x,y) for x in range(6) for y in range(6) if x %2==0 and if y%2==1]print(li)for x in range(0,6):    print('111111111111')#0次 包含了 0 1 2 3 4 5                         #1次 包含了 0 1 2 3 4 5    print(x)    for y in range(0, 6):        print('22222222222')        print(y)        if x % 2 == 0:            print(x)            print('=========')        if y % 2 == 1:            print(y)
(3)求M中3,6,9组成的列表
 

lst = [3, 6, 9]

result = [[n-2, n-1, n] for n in lst]
print(result)

##############[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

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

result = [lst[2] for lst in M]
print(result)

#############打印出 3 6 9

 
(4)求出50以内能被3整除的数的平方,并放入到一个列表中。
li=[i*i for i in range(1,51) if i %3 ==0]print(li)
(5)构建一个列表:['python1期', 'python2期', 'python3期', 'python4期', 'python6期', 'python7期', 'python8期', 'python9期', 'python10期']
li=['python%s期' %i for i in range(1,11)]print(li)
(6)构建一个列表:[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
li =[(x,y)for x in range(6) for y in range(7) if x==y-1]print(li) print([ (n, n + 1) for n in range(6) ])
# for x in range(6): #     for y in range(7):#0 0123456  1 0123456  2 0123456 #                       # 1-1=0       #2-1=1        #3-1=2 #         if x == y - 1: #             print(x)
for i in range(2):     for j in range(3):         print(i, j)         if i == j - 1:             print('====',i,j)
(7)构建一个列表:[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
 
li = [i for i in range(19) if i % 2 == 0]print(li)
 
(8)有一个列表l1 = ['alex', 'WuSir', '老男孩', '太白']将其构造成这种列表['alex0', 'WuSir1', '老男孩2', '太白3']
l1 = ['alex', 'WuSir', '老男孩', '太白']li=[l1[i]+str(i) for i in range(len(l1))]print(li)
#####思路 # l1 = ['alex', 'WuSir', '老男孩', '太白'] # for i in range(len(l1)): #     a=l1[i]+str(i) #     print(a)
(9)有以下数据类型: x = {
'name':'alex', 'Values':[{'timestamp':1517991992.94, 'values':100,}, {'timestamp': 1517992000.94, 'values': 200,}, {'timestamp': 1517992014.94, 'values': 300,}, {'timestamp': 1517992744.94, 'values': 350}, {'timestamp': 1517992800.94, 'values': 280} ],} 将上面的数据通过列表推导式转换成下面的类型: [[1517991992.94, 100], [1517992000.94, 200], [1517992014.94, 300], [1517992744.94, 350], [1517992800.94, 280]]
 
# for i in x['Values']:#     print([i['timestamp'],i['values']])li=[[i['timestamp'],i['values']] for i in x['Values']]print(li)
 

转载于:https://www.cnblogs.com/zaizai1573/p/10104885.html

你可能感兴趣的文章
oracle extract 函数简介
查看>>
JVM——参数设置、分析
查看>>
Struts 框架 之 文件上传下载案例
查看>>
【重走Android之路】【路线篇(二)】知识点归纳
查看>>
graphviz入门
查看>>
JAVA编码(37)—— Java字符串转换为MAP对象
查看>>
jquery.validate.js 一个jQuery验证格式控件
查看>>
有表格的九九乘法表
查看>>
WPF 4 DataGrid 控件(自定义样式篇)
查看>>
改善C#程序的建议1:非用ICloneable不可的理由
查看>>
PHP的错误机制总结
查看>>
window.location
查看>>
C#实现万年历(农历、节气、节日、星座、星宿、属相、生肖、闰年月、时辰)
查看>>
使用Flex图表组件
查看>>
官网分析(英雄传奇)(如何设计网站前端)
查看>>
SSH Key的生成和使用(for git)
查看>>
html5--6-52 动画效果-过渡
查看>>
调查表与调查结果分析
查看>>
Windows系统下安装MySQL详细教程(命令安装法)
查看>>
PHP实用小程序(六)
查看>>