Python 知识要点:常用内置函数
https://www.runoob.com/python/python-built-in-functions.html
filter(function, iterable)
作用:用于过滤序列,过滤掉不符合条件的元素。
参数:接收两个参数,第一个为函数,第二个为序列。
- function -- 判断函数。
- iterable -- 可迭代对象。
原理:序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,保留返回 True 的元素。
返回值:Pyhton2.x 返回列表;Python3.x 返回迭代器对象,若要转换为列表,可以使用 list() 来转换。
- Python2.x 中返回的是过滤后的列表;Python3.x 中返回到是一个 filter 类。
- filter 类实现了 __iter__ 和 __next__ 方法, 可以看成是一个迭代器。
# 过滤函数 def func(n): return n % 2 == 1 list_1 = [i for i in range(10)] result_1 = filter(func, list_1) print(result_1) # <filter object at 0x0000017A4FF67AF0> 返回一个迭代器对象 print([t for t in result_1]) # [1, 3, 5, 7, 9] result_2 = filter(lambda x: x % 3 == 1, list_1) print(result_2.__next__()) # 使用 __next__ 和 next(),会分别迭代出迭代器对象 result_2 的一个元素 print(next(result_2)) # 这三个输出分别是:1,4,[7] print([t for t in result_2])
map(function, iterable1, iterable2, ...)
作用:将传入的函数依次作用到序列的每个元素,并把结果返回。
参数:接收两个参数,第一个为函数,第二个为序列。
- function -- 判断函数。
- iterable -- 可迭代对象。
返回值:Pyhton2.x 返回列表;Python3.x 返回迭代器对象。
注意报错:TypeError: 'map' object is not callable 一般出现的原因是迭代对象(str,abs等)或者函数(map)被修改,不再是原来的函数,导致出现不可迭代对象。
def fun(x, y): return x + y result_1 = map(fun, [1, 2, 3], [1, 2, 3]) print(result_1) # <map object at 0x000001A668BBB700> print([t for t in result_1]) # [2, 4, 6] # 如果函数有多个参数, 但每个参数的序列元素数量不一样, 会根据最少元素的序列进行 result_2 = map(lambda x, y, z: x + y + z, [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5]) print(result_2.__next__()) # 3 print(list(result_2)) # [6, 9]
reduce(function, iterable[, initializer])
作用:对参数序列中元素进行累积。
参数:有初始参数,从初始参数开始作为第一个参数累积
- function -- 函数,有两个参数
- iterable -- 可迭代对象
- initializer -- 可选,初始参数
原理:函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
返回值:单一结果返回值
注意:在 Python3 中,reduce() 函数已经被从全局名字空间里移除了,它现在被放置在 functools 模块里。
# reduce 函数 from functools import reduce list_1 = [1, 2, 3] result_1 = reduce(lambda a, b: a+b, list_1) result_2 = reduce(lambda a, b: a+b, list_1, 100) print(result_1) # 6 print(result_2) # 106
一、数学相关
1、绝对值:abs(-1)
2、最大最小值:max([1,2,3])、min([1,2,3])# 进行比较的数据类型必须都是一致的
a='1,2,3,4' type(a) # 类型为字符串 <type 'str'> max(a) # max 返回了最大值 '4',返回是字符串类型 a=[1,2,3,4] type(a) # 类型是列表 <type 'list'> max(a) #max函数也返回了最大值 4 a=[(1,2),(2,3),(3,4)] # 列表里面是元组构成元素 max(a) # (3, 4) # 按照元素里面元组的第一个元素的ascii排列顺序,输出最大值(如果第一个元素相同,则比较第二个元素,输出最大值)
a=[('9',1), ('a',1),('A',1)] max(a) # ('a', 1) a={1:2,2:2,3:1,4:'aa'} # 比较字典里面的最大值,会输出最大的键值 max(a) # 4
3、序列长度:len('abc')、len([1,2,3])、len((1,2,3))
4、取模:divmod(5,2) // (2,1) 返回一个包含商和余数的元组 (a // b, a % b)
取模和取余 只要 a 和 b 同符号,取模运算和取余运算结果就相同 因为两者的计算步骤都一样,主要的差别在于第一步的 c = a/b , 取余运算向 0 取整,取模运算向负无穷取整 例如:4/(-3) 约等于 -1.3 在取余运算时候商值向 0 方向舍弃小数位为 -1 在取模运算时商值向负无穷方向舍弃小数位为 -2
在 Python 中,取余的计算公式与别的语言并没有什么区别:r=a-n*(a//n)
这里 r 是余数,a 是被除数,n 是除数。
不过在“a//n”这一步,当 a 是负数的时候,我们上面说了,会向下取整,即向负无穷方向取整。这也就得到:
-123%10 = -123 - 10 * (-123 // 10) = -123 - 10 * (-13) = 7
5、乘方:pow(2,3,4)
import math math.pow( x, y ) # 只能接收两个参数 内置的 pow() 方法 pow(x, y[, z]) 函数是计算 x 的 y 次方,如果 z 存在(x,y 必须为整数),则再对结果进行取模,其结果等效于 pow(x,y) %z。 注意:pow() 通过内置的方法直接调用,内置方法会把参数作为整型,而 math 模块则会把参数转换为 float
6、浮点数:round(1) // 1.0 返回浮点数“四舍五入”值
round( x [, n]) # 四舍五入,n 小数位数 round(0.5) # 0 round(1.5) # 2 Python2.7,保留值将保留到离上一位更近的一端(四舍六入),如果距离两端一样远,
则保留到离0远的一边。所以round(0.5)会近似到1,而round(-0.5)会近似到-1。 Python3.5,如果距离两边一样远,会保留到偶数的一边。比如round(0.5)和round(-0.5)都会保留到0,
而round(1.5)会保留到2。
二、功能相关
1、函数是否可调用:callable(funcname),注意,funcname变量要定义过
callable() 函数用于检查一个对象是否是可调用的。如果返回 True,object 仍然可能调用失败;
但如果返回 False,调用对象 object 绝对不会成功。 对于函数、方法、lambda 函式、 类以及实现了 __call__ 方法的类实例, 它都返回 True。
2、类型判断:isinstance(x,list/int)
a = 2 isinstance(a, int) # True isinstance(a, str) # False isinstance(a, (str, int, list)) # True # isinstance() 与 type() 区别: # type() 不会认为子类是一种父类类型,不考虑继承关系。 # isinstance() 会认为子类是一种父类类型,考虑继承关系。 class A: pass class B(A): pass isinstance(A(), A) # True type(A()) == A # True isinstance(B(), A) # True type(B()) == A # False
3、比较:cmp('hello','hello')
cmp(x,y) 函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。 Python 3.X 的版本中已经没有 cmp 函数,如果你需要实现比较功能,需要引入 operator 模块,适合任何对象,包含的方法有: import operator operator.eq('hello', 'name') # False operator.eq('hello', 'hello') # True
4、快速生成序列:(x)range([start,] stop[, step])
start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
三、类型转换
1、int(x)
2、long(x)
3、float(x)
4、complex(x) // 复数
5、str(x)
6、list(x)
7、tuple(x) // 元组
8、hex(x) // 整数转换为十六进制
9、oct(x) // 整数转换为八进制
10、chr(x) // 返回 x 对应的字符,如chr(65)返回‘A'
11、ord(x) // 返回字符对应的ASC码数字编号,如ord('A')返回65
12、repr(x) // 将对象 x 转换为表达式字符串
13、eval(x) // 用来计算在字符串中的有效 Python 表达式,并返回一个对象
14、unichr(x) // 将整数转换为 Unicode 字符,Python3 中已合并到 chr()
四、字符串处理
1、首字母大写:str.capitalize
2、字符串替换:str.replace
3、字符串切割:str.split
五、序列处理函数
1、len:序列长度
2、max:序列中最大值
3、min:最小值
4、filter:过滤序列
5、map:并行遍历,可接受一个function类型的参数
6、reduce:归并
7、zip:并行遍历
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。 zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。 a = [1, 2] b = [3, 4, 5] c = [6, 7, 8, 9] zipped = list(zip(a, b, c)) # [(1, 3, 6), (2, 4, 7)] print(list(zip(*zip(a,b,c)))) # 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式 # [(1, 2), (3, 4), (6, 7)] nums = ['123', '456', '789'] for i in zip(*nums): print(i) ('1', '4', '7') ('2', '5', '8') ('3', '6', '9') print(list(zip(*nums))) [('1', '4', '7'), ('2', '5', '8'), ('3', '6', '9')]