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

什么是迭代器?

  可迭代对象通过__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)------------------<list_iterator object at 0x000002B84DE73748>
方法一:__next__()
print(l_obj.__next__())-------------1
print(l_obj.__next__())-------------2
print(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("")
yield "林志颖"
print('')
yield "周润发"
print('')
ret=func()
print("返回值是",ret)#返回值是 <generator object func at 0x00000000021B1F48> 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('')#0次 包含了 0 1 2 3 4 5
#1次 包含了 0 1 2 3 4 5
print(x)
for y in range(0, 6):
print('')
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)
												

python 生成器和各种推导式的更多相关文章

  1. python生成器和各种推导式

    一. 生成器 本质就是迭代器. 一个一个的创建对象 创建生成器的方式: 1. 生成器函数 2. 通过生成器表达式来获取生成器 3. 类型转换(看不到) 二. 生成器函数 (重点) 生成器函数中包含 y ...

  2. Python进阶(四)----生成器、列表推导式、生成器推导式、匿名函数和内置函数

    Python进阶(四)----生成器.列表推导式.生成器推导式.匿名函数和内置函数 一丶生成器 本质: ​ 就是迭代器 生成器产生的方式: ​ 1.生成器函数

  3. Python-02 生成器表达式,列表推导式

    列表推导式和生成器表达式 列表推导式,生成器表达式1,列表推导式比较直观,占内存2,生成器表达式不容易看出内容,省内存. [ 变量(加工后的数据) for  变量i  in 可迭代的数据类型 ] 列表 ...

  4. python之生成器和列表推导式

    一.生成器函数 1.生成器 就是自己用python代码写的迭代器,生成器的本质就是迭代器(所以自带了__iter__方法和__next__方法,不需要我们去实现). 2.构建生成器的两种方式 1,生成 ...

  5. python全栈开发day13-迭代器、生成器、列表推导式等

    昨日内容:函数的有用信息.带参数的装饰器.多个装饰器修饰一个函数 迭代器 可迭代对象:内部含有__iter__方法 迭代器 定义:可迭代对象.__iter__()就是迭代器,含有__iter__且__ ...

  6. python基础学习Day12 生成器、列表推导式、字典的表达式、字典键值对的互换、集合推导式

    一.生成器 1.1 生成器:就是(python)自己用代码写的迭代器,生成器的本质就是迭代器. 1.2 生成器函数 def func1(x): x += print() yield x print() ...

  7. Python之路----列表推导式和生成器的表达式

    列表推导式 egg_list=['鸡蛋%s'%i for i in range(10)] print(egg_list) 列表推导式 推导过程 egg_list = [] for i in range ...

  8. 《Python》 生成器和列表推导式

    一.初识生成器: 生成器就是自己用Python代码写的迭代器,生成器的本质就是迭代器. 1.Python中提供的生成器: 1.生成器函数: 使用yield语句而不是return语句返回结果.yield ...

  9. 巨蟒python全栈开发-第12天 生成器函数 各种推导式 yield from

    一.今日主要内容总览(重点) 1.生成器(目的:帮助我们创建对象) (1)生成器的本质就是迭代器 (2)一个一个的创建对象 (3)创建生成器的方式: 1.生成器函数 2.通过生成器表达式来获取生成器 ...

随机推荐

  1. 为什么开启子进程 一定要放在 if __name__ == '__main__' 下面

  2. Tmutarakan Exams URAL - 1091(莫比乌斯函数 || 容斥)

    题意: 求1 - s 中 找出k个数 使它们的gcd  > 1 求这样的k个数的对数 解析: 从每个素数的倍数中取k个数  求方案数 然后素数组合,容斥一下重的 奇加偶减 莫比乌斯函数的直接套模 ...

  3. day5 模拟用户登录

    _user= "yangtuo" _passwd = " # passd_authentication = False #flag 标志位 for i in range( ...

  4. 【AtCoder3611】Tree MST(点分治,最小生成树)

    [AtCoder3611]Tree MST(点分治,最小生成树) 题面 AtCoder 洛谷 给定一棵\(n\)个节点的树,现有有一张完全图,两点\(x,y\)之间的边长为\(w[x]+w[y]+di ...

  5. CodeForces Global Round 1

    CodeForces Global Round 1 CF新的比赛呢(虽然没啥区别)!这种报名的人多的比赛涨分是真的快.... 所以就写下题解吧. A. Parity 太简单了,随便模拟一下就完了. B ...

  6. AXURE 8弄一个轮播图的步骤

    这个图是网上找到,7.0可以使用. 如果是8.0.没有找到"动态面板"这个地方,如下图所示

  7. luogu1397 [NOI2013]矩阵游戏 (等比数列求和)

    一个比较显然的等比数列求和,但有一点问题就是n和m巨大.. 考虑到他们是在幂次上出现,所以可以模上P-1(费马小定理) 但是a或c等于1的时候,不能用等比数列求和公式,这时候就要乘n和m,又要变成模P ...

  8. loj6157 A ^ BProblem (并查集)

    设s[x][i]表示从根到x的异或和在第i位上的值(0/1),(a,b,i)表示a到b的异或和在第i位上的值那么就有(a,b,i)=(s[a][i]^s[b][i]^s[lca][i]^s[lca][ ...

  9. [CTSC2010]珠宝商 SAM+后缀树+点分治

    [CTSC2010]珠宝商 不错的题目 看似无法做,n<=5e4,8s,根号算法? 暴力一: n^2,+SAM上找匹配点的right集合sz,失配了直接退出 暴力二: O(m) 统计过lca=x ...

  10. (七)修改上一条SQL语句,NULL值的滤空函数nvl

    修改上一条SQL语句 1.用c命令来修改(c 即 change ) 默认,光标闪烁位置指向上一条SQL语句的第一行.输入二则定位到第二行. c /错误的关键字/正确的关键字 SQL form emp; ...