day 16 - 1 内置函数(二)
内置函数(二)
reversed() 返回一个反向的迭代器
k = [1,2,3,4,5] k.reverse() #反转 print(k) k = [1,2,3,4,5] k2 = reversed(k) #反向的迭代器 print(k2) for i in k2: print(i) #返回结果 反序的迭代器 <list_reverseiterator object at 0x0000000000B8FBA8> #保留原列表,返回一个反向的迭代器
slice() 切片(函数,不怎么用)
l = (1,2,23,213,5612,342,43) sli = slice(1,5,2) print(l[sli]) print(l[1:5:2])
format() 格式化输出,它有很多功能
print(format('test', '<20')) #左对齐 print(format('test', '>40')) #右对齐 print(format('test', '^40')) #居中
bytes() 转换为 bytes 类型
# 我拿到的是gbk编码的,我想转成utf-8编码 print(bytes('你好',encoding='GBK')) # unicode 转换成GBK的 bytes print(bytes('你好',encoding='GBK').decode('GBK')) #二进制又转为 GBK print(bytes('你好',encoding='utf-8')) # unicode 转换成 utf-8 的 bytes #bytes 用途 # 网络编程 只能传二进制 # 照片和视频也是以二进制存储 # html网页爬取到的也是编码
bytearray() 是一个 byte 类型的数组
b_array = bytearray('你好',encoding='utf-8') print(b_array) #'\xe4\xbd\xa0\xe5\xa5\xbd' print(b_array[0]) #228
ord() 字符按照 unicode 转数字
print(ord('好')) print(ord('1'))
chr() 数字按照 unicode 转字符
print(chr(97))
ascii() 只要是 ascii 码中的内容 就打印出来,不是就转换成 \u
print(ascii('好')) print(ascii('1'))
repr() 用于百分号格式化输出
name = 'egg' print('你好%r'%name) print(repr('1')) #是什么就打印什么 print(repr(1))
all() 判断是否有 bool 值为 False 的值
返回的值有有任意一个 False 整体就为 False
print(all(['a','',123])) print(all(['a',123])) print(all([0,123]))
any() 判断是否有 bool 值为 True 的值
返回的值有有任意一个 True 整体就为 True
print(any(['',True,0,[]]))
很重要的四个内置函数 zip filter map sorted
zip() 拉链方法 返回的是一个迭代器
木桶短板原则来拉链
l = [1,2,3,4,5] l2 = ['a','b','c','d'] l3 = ('*','**',[1,2]) d = {'k1':1,'k2':2} for i in zip(l,l2,l3,d): print(i)
filter() 过滤
filter() 函数接收一个函数 f 和一个 list,这个函数 f 的作用是对每个元素进行判断,返回 True 或 False,filter() 根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新 list
def is_odd(x): return x % 2 == 1 #返回奇数 ret = filter(is_odd,[1,2,3,4,5,6,7,8,9]) #像如下的列表推导式 [i for i in [1,2,3,4,5,6,7,8,9] if x % 2 == 1] print(ret) #可见这里返回的是一个迭代器 for i in ret: print(i) #返回字符串 def is_str(x): return type(x) == str ret = filter(is_str,[1, 'hello',[],'',None,6,7,'world',12,17]) #''也属于字符串 for i in ret: print(i)
#利用filter(),可以完成很多有用的功能 例如:删除 None 或者空字符串(不考虑 0 的问题) def is_not_empty(s): return s and len(str(s).strip()) > 0 return s and str(s).strip() ret = filter(is_not_empty,[1,'hello',[],'',None,6,7,'world',12,17]) for i in ret: print(i) #请利用filter()过滤出1~100中平方根是整数的数,即结果应该是: #[1, 4, 9, 16, 25, 36, 49, 64, 81, 100] from math import sqrt #开平方 def sqrts(s): ret = sqrt(s) return ret % 1 == 0 #除以一余零为整数 ret = filter(sqrts,range(1,101)) for i in ret: print(i)
map 函数应用于每一个可迭代的项,返回的是一个结果 list。如果有其他的可迭代参数传进来,map 函数则会把每一个参数都以相应的处理函数进行迭代处理。map() 函数接收两个参数,一个是函数,一个是序列,map 将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回
ret = map(abs,[1,-4,6,-8]) print(ret) for i in ret: print(i)
filter 执行了 filter 之后的结果集合 <= 执行之前的个数
filter 只管筛选,不会改变原来的值
map 执行前后元素个数不变
值可能发生改变
sorted() 排序
sorted 使用场景:列表数据不大,且还要保留原有列表顺序的时候 因为 sorted 排序不改变原有列表 所以在内存空间就会有两个列表 k = [1,-4,6,5,-10] #从小到大进行排序 k.sort(key = abs) #sort 在原列表的基础上进行排序 print(k) # reverse=True 从大到小排序 reverse=False 从小到大排序(默认) print(sorted(k,key=abs,reverse=True)) #sorted 生成了一个新列表 不改变原列表 占内存 print(k) ##根据列表中每一个元素的长度进行排序 h = [' ',[1,2],'hello world'] print(sorted(h,key=len))
匿名函数
带有 key 的五个函数,都可以和 lambda 函数组合
min max filter map sorted —— lambda
def add(x,y): return x+y print(add(10,20)) #匿名函数组成部分(不允许换行) #函数名 = 匿名函数关键字 参,数 : 返回值(函数名是匿名函数赋值后才有的) add = lambda x,y:x+y print(add(1,2)) #直接后面传递实参 (lambda x,y: x if x> y else y)(101,102) #上面是匿名函数的函数用法。除此之外,匿名函数也不是浪得虚名,它真的可以匿名。在和其他功能函数合作的时候
取出字典中 value 最大值对应的 key 值
#用普通函数的写法 dic={'k1':10,'k2':100,'k3':30} def func(key): return dic[key] print(max(dic,key=func)) #根据返回值判断最大值,返回值最大的那个参数是结果 #匿名函数的写法 一行搞定 print(max(dic,key=lambda k:dic[k]))