zoukankan      html  css  js  c++  java
  • 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')]
  • 相关阅读:
    toj 2819 Travel
    toj 2807 Number Sort
    zoj 2818 Prairie dogs IV
    zoj 1276 Optimal Array Multiplication Sequence
    toj 2802 Tom's Game
    toj 2798 Farey Sequence
    toj 2815 Searching Problem
    toj 2806 Replace Words
    toj 2794 Bus
    css截取字符
  • 原文地址:https://www.cnblogs.com/dc2019/p/13620460.html
Copyright © 2011-2022 走看看