发布于2019-08-03 08:32 阅读(5797) 评论(0) 点赞(6) 收藏(7)
集合的一个重要特点是:自动去除重复的值
li = [1,2,3,1,1,2,2,3,3]#去除重复的元素 set = set(li) #转换为集合,因为集合会自动去重。 print(set) li = list(set)#将集合转换为列表 print(li)
规则:生成器函数,或者生成器表达式,在调用后返回生成器,但生成器内部的函数没有执行,只有在从生成器中取值是,其内部的函数才执行。
一个生成器只能只能用一次:将一个生成器中的值全部取出来之后,再从中取值得到的是空。
从生成器中取值:
for:如果没有break,会一直取知道取完。
next:一个一个取
send:取下一个值得同时给上一个位置传入一个新的值,使用send之前要先用一次next。
数据类型强转:会一次性把所有的数据都读到内存里。
在生成器表达式外有for循环时,把for循环拆开来分析。
def demo(): for i in range(4): yield i g=demo() g1=(i for i in g) g2=(i for i in g1) print(list(g1)) print(list(g2))
在执行list(g1)之前,生成器函数,生成器表达式中的内容都没有执行。(只有从生成器中取值时,生成器函数,生成器表达式中的内容才会执行)
当执行list(g1)时,就是从g1这个生成器中取值(数据类型强转),g1又去找g要值,所以执行结果是:[0,1,2,3]。
当执行list(g2)时,g2生成器会找g1生成器要值,而list(g1)语句,以及将生成器g1中的值取出来,所以g1是空,执行结果为:[]
def add(n,i): return n+i def test(): for i in range(4): yield i g=test() for n in [1,10]: g=(add(n,i) for i in g) print(list(g))
同上:在list(g)之前,生成器函数,生成器表达式内的语句都没有执行。只有当取生成器中的值得时候才执行。
遇见for循环里面有生成器表达式,将for循环拆解开来。
n = 1
g = (add(n,i) for i in g)
n = 10
g = (add(n,i) for i in g)
当执行list(g)时,生成器函数或者是生成器表达式中的内容开始执行。
n就变成了循环中的最后一个值。
for循环中就变为:
n = 10
g = (add(n,i) for i in (add(n,i) for i in test()))
结果为:[20,21,22,23]
import time def down(): for i in range(0,101,2): time.sleep(0.1) char_num = i//2 #对i取商 #\r是每次打印从头打印,%%打印% #当i=100时,在最后打印一个换行符,保证再有内容输入时,从下一行输入。 str = '\r%s%% : %s\n'%(i,'*'*char_num) if i == 100 else '\r%s%% : %s'%(i,'*'*char_num) print(str,end='',flush=True) #end:每次输入的结束符号 down() print('下载完成')
考察匿名函数式往往会结合内置函数。
可以结合匿名函数的内置函数:
min:求最小值,min(iterable,key)
max:同上
filtre: ilter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合 条件元素组成的新list。filter(f,list)。结果不大于原来的list
map: map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。结果等于原来的list
sorted: 函数sorted进行排序(从2.4开始),返回副本,原始输入不变
与sort的区别:函数sort进行排序,在本地进行排序,不返回副本
语法:sort(iterable,key,reverse)
iterable:是可迭代类型;
key:传入一个函数名,函数的参数是可迭代类型中的每一项,根据函数的返回值大小排序;
reverse:排序规则. reverse = True 降序 或者 reverse = False 升序,有默认值(False)。
返回值:有序列表
1.
#用匿名函数将两个元组('a','b'),('c','d')变为[{'a':'b'},{'c':'d'}] def func(x): return {x[0]:x[1]} ret = zip(('a','b'),('c','d'))#输出('a','c') ('b','d') result = map(func,ret) print(list(result)) #一行代码实现 print(list(map(lambda trup:{trup[0]:trup[1]},zip(('a','b'),('c','d')))))
2.
def multipliers(): return [lambda x:i*x for i in range(4)]#列表推导式 #执行完后:[lambda x:i*x,lambda x:i*x,lambda x:i*x,lambda x:i*x] print([m(2) for m in multipliers()]) #执行 multipliers(),返回一个列表(由列表推导式得到的) #执行for m in multipliers(),m就是列表里的每一个匿名函数 #m(2)就是调用匿名函数 #执行m(2)时,2传给x,i最后是=3,所以lambda x:i*x --> 3*2 #结果:[6, 6, 6, 6] def multipliers(): return (lambda x:i*x for i in range(4))#生成器表达式 print([m(2) for m in multipliers()]) #执行multipliers(),执行这个函数,返回一个生成器,而生成器表达式中的语句没有执行 #执行一次for循环就相当于执行一次next() #执行一次for m in multipliers(),再执行一次lambda x:i*x for i in range(4),再执行一次m(2) # lambda x:0*x ---> m(2) 0*2=0 # lambda x:1*x ---> m(2) 1*2=2 # lambda x:2*x ---> m(2) 2*2=4 # lambda x:3*x ---> m(2) 3*2=6 #结果:[0, 2, 4, 6]
作者:奋斗
链接:https://www.pythonheidong.com/blog/article/3782/190944b2d667798f24e0/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!