内置函数 二
四、数据结构相关(24)
(一)、相关内置函数:(8)
1、filter(函数func,可迭代对象)
过滤,将可迭代对象内容,一个一个传入函数func进行 过滤,func中只返回True或False,filter返回一个新的迭代器
#返回的迭代器里的值,数量有可能跟原来的可迭代对象个数不一样(map 是一样)
例如:删除列表中的None 和空字符串:
def is_not_empty(n): if n is not None and n!="": return True g = filter(is_not_empty,['test', None, '', 'str', ' ', 'END']) print(list(g)) 输出:['test', 'str', ' ', 'END']
2、map
map(函数func,可迭代对象),通过函数func修改可迭代对象的内容,并返回一个迭代器
#(迭代器里值的个数,跟可迭代对象的一致)
def func(i): return i*i g = map(func,[1,2,3,4]) print(list(g))
3、enumerate 枚举
enumerate(可迭代对象,start=0)将一个可迭代对象的元素和索引,组合成一个元组,start为开始索引,默认为0
返回一个迭代器
例如:
a = enumerate(["a","b","c"]) for i in a:print(i) 输出:(0, 'a') (1, 'b') (2, 'c')
例如:给字典加编号:
se = {'computer':10000,'umbrella':200}
for num,name in enumerate(se):
print(num,name,se[name])
输出
0 computer 10000
1 umbrella 200
4、len 长度
5、all() 判断是否有bool值为False的值
参数为可迭代对象,如果元素全为True,则返回True,如果直接传入空的列表,字符串等,也是True
例如:
all( [ ] ) ——》True
all( [1,2,"",{}] ) ——》False
6、any() 判断是否有bool值为True的值
参数为可迭代对象,只要元素有一个是True,就返回True,如果直接传空的列表等,返回False
7、zip 拉链,将多个可迭代对象,像拉链一样,组合在一起,组成多个元组,返回一个迭代器
例如:
l = [1,2,3,4,] a = "abc" dic = {"k1:v1","k2:v2"} for i in zip(a,l,dic):print(i) 输出 ('a', 1, 'k2:v2') ('b', 2, 'k1:v1')
8、sorted 排序
sorted(可迭代对象,key,reverse) ,返回一个新列表
key可以传入一个函数,例如key=abs,按绝对值大小排序,key=len,按内容的长度排序,
reverse默认为False,从小到大。设置为True时从大到小
#与列表内的方法list.sort() 区别:list.sort 修改的是列表本身,sorted 是新的列表
(二)、数据集合相关(3)
dict 强转
set 强转
frozenset(可迭代对象):构建一个不可变的唯一元素无序集合,返回值可以作字典的key
例如:
a = frozenset([1,5,22,22,33]) print(a,type(a)) 输出 frozenset({1, 5, 22, 33}) <class 'frozenset'>
(三)、序列相关(13)
1、列表和元组
list 强转
tuple 强转
2、相关内置函数:
1、reversed(可迭代对象) ,翻转内容, 返回一个迭代器,
2、slice 相当于切片,在多次重复同种切片操作时,有可能会用到
例如:
ls = [1,2,3,4,5,6,7] my_slice = slice(1,5,2) print(ls[my_slice]) 输出:[2,4]
3、字符串相关
1、str 强转
用法很多
比如:左右对齐,中间对齐
print(format("a","<20")) 左对齐 print(format("a",">20")) 右对齐 print(format("a","^20")) 居中 输出: a a a
3、bytes 转换为字节 网络传输时用字节
s = "alex 和xxx"
by = bytes(s,encoding='utf-8') 转为字节:b'alex \xe5\x92\x8cxxx'
ne = by.decode('utf-8') 对字节再编码:alex 和xxx
4、bytearray(可迭代对象) 返回一个新的字节数组
生成的数组的元素是可变的,并且每个元素的值变化范围:0<= x <256
与字符串相比:字符串做修改,是新建一个新的字符串,bytearray 则是修改的自身
#array c语言里的数组
a = "alex和" ret = bytearray(a,encoding="utf-8") print(ret,id(ret)) ret[0] = 65 变为A print(ret,id(ret)) s = ret.decode("utf-8") 再编码 print(s) 输出:bytearray(b'alex\xe5\x92\x8c') 2363696713208 bytearray(b'Alex\xe5\x92\x8c') 2363696713208 Alex和
5、memoryview
函数返回给定参数的内存查看对象(memoryview)
#内存查看对象:是指对支持换缓冲区协议的数据进行包装,在不需要复制对象基础上允许Python代码访问(?)
ret = memoryview(bytes("你好",encoding="utf-8")) #ret是个内存地址,只能查看,不能修改 print(ret,len(ret)) #<memory at 0x000001D2F8DB5F48> 6 print(ret[:3]) #<memory at 0x000001D2FAA9A1C8> print(bytes(ret[:3]).decode("utf-8")) #你 print(bytes(ret[3:]).decode("utf-8")) #好
6、ord 字符按照unicode转数字
print(ord("A")) 65
7、chr 数字按照unicode转字符
print(chr(65)) A
8、ascii 字符串转ascii (还是str类型)
print(ascii('你好')) '\u4f60\u597d'
print(ascii("abc")) 'abc'
9、repr 主要用于%r 格式化输出
可以原封不动的显示出来,包括字符串两边的引号,这样可以区分'123' 和 123
print(repr("123")) '123' (带引号)
print("%r" % ("123")) '123' (带引号)
五、数字相关(14)
(一)、数据类型(4)
bool
int
float
complex(实部,虚部) 如果传入一个字符串,如:"1+2j",则+号两边不能有空格
print(complex(1,2)) (1+2j)
print(complex("1+2J") (1+2j)
(二)、进制转换(3)
bin :二进制
oct:八进制
hex:十六进制
print(bin(10)) 0b1010 print(oct(10)) 0o12 print(hex(10)) 0xa
(三)、数学运算(7)
1、abs()
计算绝对值
2、divmod(两个数)
返回一个元组,(整除数,余数) 在做分页的时候可以用
print(divmod(7,2) (3,1)
3、round 小数精确,会四舍五入
位数参数如果比小数长,则原小数不变
print(round(3.1415926,4)) 3.1516 print(round(3.1415926,100)) 3.1415926
4、pow 幂运算
pow(x,y,z) 默认z为1, x的y次方,再对%z 取余
5、sum 求和
sum(iterable,start) start默认为0 最后结果为start+iterable中的值的总和
可以应用在本金与利息算总和
不能接收散列的值,例如sum(1,2,3)是不对的
6、min max 最小 最大值
min max(iterable,key,default)
#可以接收散列的值,和可迭代对象
#key 是一个函数名,通过函数的返回值 来确定最后的结果
#default ,如果迭代对象为空时,用来设置默认的最小值
例如
print(max([1,2,-3],key=abs)) -3

浙公网安备 33010602011771号