python新手入门笔记(七)——数学运算及序列操作
- 内置函数
- abs()
- round()
- pow()
- divmod()
- max min sum
- eval()
- int()、bin()、oct()、hex()
- ord()、chr()
- 序列操作
- all
- any
- sorted、reversed
- enumerate
- zip
- map
- reduce
- filter
- 扩展
内置函数
abs()
求绝对值,进行数学分析的时候使用,一般情况下用不到。
round()
四舍五入
round(2.6)
>>>3
round(2.3333333, 2)
>>>2.33
pow()
pow() 方法返回 xy(x的y次方) 的值。
如果是pow(x, y[, z]),函数是计算x的y次方,如果z在存在,则再对结果进行取模,其结果等效于pow(x,y) %z。
内置函数pow(),和数学函数math.pow()的区别:
pow() 通过内置的方法直接调用,内置方法会把参数作为整型,而 math 模块则会把参数转换为 float。
divmod()
divmod(a,b) a除以b的结果和余数。
max min sum
max:求最大值,返回ASCII码最大的字符
min:求最小值,返回ASCII码最小的字符
sum:求和
eval()
执行字符串中的表达式,一般用来进行类型转换。
eval('4+3')
>>> 7
str1 = "['p','y','t','h','o','n']"
eval(str1)
>>> ['p','y','t','h','o','n']
int()、bin()、oct()、hex()
进制转换
int —— 十进制
bin —— 二进制
oct —— 八进制
hex —— 十六进制
ord()、chr()
ord():字符向ASCII编码转换
chr():ASCII编码向字符转换
ord('a')
>>> 97
chr(65)
>>> A
序列操作
all
判断真假,当序列全为真则True,有一假为False,空序列为True。
all([1,2,3,4,5])
>>> True
all([1,2,3,4,0])
>>> False
all([])
>>> True
any
判断真假,当序列有一真为True,空序列为False。
any([1,2,3,0])
>>> True
any([])
>>> False
sorted、reversed
排序和翻转
list1 = [4,1,6,7,8,3,2,5]
list1.sort() # 会改变列表本身,当print(list1.sort())时,会返回None,实际结果已经升序排序了,id不变
sorted(list1) # 不会改变本身,返回新的列表,创建新的id,list1的id仍然存在
# 关于reversed的应用
reversed(list1) # 结果翻转[5,2,3,8,7,6,1,4]
list1.sort(reverse=True) # 结果按降序排序
sorted(list1,reverse=True) # 同上
拓展:sorted(a,b),a为序列,b为key。key可以是任意符合规则的表达式。如下:
i = ['I','H','A','W','G','d','u','g','h','a','w','e']
print(sorted(i,key=str.lower)) # ['A', 'a', 'd', 'e', 'G', 'g', 'H', 'h', 'I', 'u', 'W', 'w']
enumerate
对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值。
一般用于读文件。
list1 = [1,2,3,4,5,6,7,8]
print(enumerate(list1)) # 这里返回的是一个对象,属于迭代器的一种,<enumerate object at 0x0000021CFE7F6900>
for i in enumerate(list1): # 迭代器都可用for循环显示其中包含的内容
print(i) # 结果显示为元组,此处可自己做测试查看
print(dict(enumerate(list1))) # {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8}
上网查了一下,对于列表中存在字典要提取其中key所对应的value值,网上没有找到相关方法,可能是我的打开方式不对,在此做个例子记录一下:
li = [{'name':'xiaohong','socre':49},{'name':'lily','socre':70},{'name':'lixiaolong','socre':90},{'name':'pangdu','socre':70}]
for x,y in enumerate(li,1):
print(x,y['name'],y['socre'])
enumerate打印出来的结果是一个又一个包含两个元素的元组,上述例子中,x,y分别对应元组里的编号和遍历出来的字典,此时只需要提取字典中的value值就行了,即y[‘key’]。
zip
用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
list1 = [1,2,3,4,5,6,7,8]
list2 = [2,3,4,5,6,7,8,9]
print(zip(list1,list2)) # 返回一个对象,也是迭代器,<zip object at 0x000001D6FFD769C0>
for i in zip(list1,list2): # 此处不做重复解释
print(i)
如果要保留被除去的元素。进行如下操作。
from itertools import zip_longest
list1 = [1,2,3,4,5,6,7,8]
list2 = [2,3,4,5]
for i in zip_longest(list1,list2):
print(i)
该操作可将缺失部分用None来填充。
map
map(function, iterable, …) 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新对象。
for i in map(str,[1,2,3,4,5,6]):
print(i)
print(type(i))
print(list(map(str,[1,2,3,4,5,6])))
reduce
reduce一定要接受两个参数
from functools import reduce
print(reduce(lambda x,y:x+y,[1,2,3,4,5])) #15
上述例子是一个累加过程,相当于一个x += y
的过程。
这里有种特殊情况,如果有第三个参数,该参数优先与序列第一个位置进行计算。
from functools import reduce
print(reduce(lambda x,y:x+y,['a','b','c','d'],'x')) # xabcd
filter
过滤作用
print(list(filter(lambda x:x%2, range(10))))# [1, 3, 5, 7, 9]
# 去除空字符串
print(list(filter(lambda s:s and s.strip(),['A','',None,'B',' ','C'])))
# 空字符串是假的,即False,
扩展
list1 = [1,2,3,4,5,6,7,8]
list2 = [2,3,4,5]
d1 = {'name':'zhangsan','age':17}
from itertools import chain # 同时遍历不同的序列,相当于序列相加:list1+list2
for x in chain(list1,list2,d1):
print(x)
序列遍历的方法:enumerate,zip,chain