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]))

 

posted @ 2018-12-10 01:08  亦双弓  阅读(158)  评论(0编辑  收藏  举报