zoukankan      html  css  js  c++  java
  • python内置函数易混点

    1.举例sort和sorted对列表排序,list=[0,-1,3,-10,5,9]

    #列表排序
    list=[0,-1,3,-10,5,9]
    list.sort(reverse=False)
    print("list.sort在list基础上修改,无返回值",list)
    
    list=[0,-1,3,-10,5,,9]
    res=sorted(List,reverse=False)
    print("sorted有返回值是新的list",list)
    print("返回值",res)
    

     2. 在Python中,函数式编程主要由几个函数的使用构成:lambda()、map()、reduce()、filter(),zip()

    列表解析

    列表解析在python中能够简化我们对列表内元素逐一进行操作的代码,也称列表推导式,可以替代函数简化表达。

    具体例子:

    a = [1, 2, 3,4,5]
    b = []
    for i in a:
        b.append(i *2)

    使用列表解析表示方式:

    a = [1, 2, 3,4,5]
    b = [i*2 for i in a]

    从上面的式子来看,列表解析的表达比for循环要来得简洁。

    lambda()函数

    lambda是Python支持一种有趣的语法,它允许你快速定义单行的最小函数,类似与C语言中的宏,可以用在任何需要函数。

    f = lambda x: x * 2
    f(3)
    #结果为6
    

      

    map()函数

    先定义一个函数,然后再用map()命令将函数逐一应用到(map)列表中的每个元素,最后返回一个数组。map()命令也接受多参数的函数,
    map函数格式为map(function,sequence)
    把sequence中的值当参数逐个传给function,返回一个包含函数执行结果的list。
    如果function有两个参数,即map(function,sequence1,sequence2)。

    如map(lambda x,y:x*y,a,b)表示将a、b两个列表的元素对应相乘,把结果返回给新列表。

    假设有一个列表a=[1,2,3],要给列表中的每个元素都加2得到一个新列表

    b = map(lambda x: x+2, a)
    b = list(b) 
    #结果是[3, 4, 5]

    有了列表解析,为什么还要有map()命令呢?
    其实列表解析虽然代码简短,但是本质上还是for命令,而Python的for命令效率并不高,而map()函数实现了相同的功能,并且效率更高,原则上来说,它的循环命令速度相当于C语言。

    reduce()函数

    reduce()函数。它有点像map()函数,但map()函数用于逐一遍历,而是reduce()函数用于递归计算。
    reduce函数格式为reduce(function,sequence)
    function接收的参数个数只能为2
    先把sequence中第一个值和第二个值当参数传给function,再把function的返回值和第三个值当参数传给
    function,然后只返回一个结果。

    具体例子如下

    s = 1
    for i in range(1, 5):
         s = s * i

    上面是一个1到4的阶乘,如果换成reduce函数可以简化为:

    reduce(lambda x,y: x*y, range(1, 5))

    其中,lambda x,y:x*y构造了一个二元函数,返回两个参数的乘积。reduce命令首先将列表的前两个元素作为函数的参数进行运算,然后将运算结果与第三个数字作为函数的参数,然后再将运算结果与第四个数字作为函数的参数……依此递推,直到列表结束,返回最终结果。

    filter()函数

    filter()函数。顾名思义,它是一个过滤器,用来筛选出列表中符合条件的元素。
    filter函数格式为filter(function,sequence)
    function的返回值只能是True或False
    把sequence中的值逐个当参数传给function,如果function(x)的返回值是True,就把x加到filter的返回值里面。

    具体例子如下:

    b=[]
    for i in range(10):
         if i >3 and <6:
            b.append(i) 

    使用filte()函数实现以上目的的语句如下:

    b=filter(lambda x:x>3 and x<6 ,range(10))
    b=list(b)

    整体上比for循环要简洁不是,而且速度上要比循环来得快。

    zip()函数

    返回一个元祖列表,该元祖按顺序包含每个序列的相应元素,以最小的一个为准。
    zip函数格式为zip(sequence1,sequence2,..)

    具体例子如下:

    a=[1,2,3]
    b=[5,6]
    
    for i,j in zip(a,b):
         print(i,j)
    
    #结果为(1,5)  (2,6)

    在python中,把很多内置函数结合起来使用,可以使用很少的代码来实现很多复杂的功能,结合匿名函数,列表解析一起使用,功能更加强大.使用内置函数最显而易见的好处是:
    速度快,使用内置函数,比普通的PYTHON实现,速度要快一倍左右,还有就是代码简洁。

  • 相关阅读:
    Leetcode 15 3Sum
    Leetcode 383 Ransom Note
    用i个点组成高度为不超过j的二叉树的数量。
    配对问题 小于10 1.3.5
    字符矩阵的旋转 镜面对称 1.2.2
    字符串统计 连续的某个字符的数量 1.1.4
    USACO twofive 没理解
    1002 All Roads Lead to Rome
    USACO 5.5.1 求矩形并的周长
    USACO 5.5.2 字符串的最小表示法
  • 原文地址:https://www.cnblogs.com/wxcx/p/12503497.html
Copyright © 2011-2022 走看看