zoukankan      html  css  js  c++  java
  • 函数拓展及表达式

    一.函数的递归

    递归(recursion):在函数内部自己调用自己。

    递归分为两个阶段:回溯和递推。

    回溯:回溯一次,问题的复杂度就会进一步降低,直到终止条件成立,结束。

    递推:从终止条件成立时,一次次的往回推导

    l = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,]]]]]]]]]]]]]
    
    def get_num(l):
        for i in l:
            if type(i) is int:
                print(i)
            else:
                get_num(i)
    
    get_num(l)
    View Code

    pycharm导入import sys模块,通过sys.getrecursionlimit()方法,知道递归的层数默认值为1000,但是实际上只有997(从0开始)。

    可以通过sys.setrecursionlimit()方法,指定递归层数。

    两种代替代码块的方式:

      第一种顶替方式 pass (推荐使用pass)
      第二种顶替方式 ... 

    二.二分法

    应用场景:在一个有序的容器内查找某个值

    查找方法:每次查找都从中间开始进行比较。

    l = [1,2,3,4,5,6,7,8,9,10]
    count =0
    target= 5
    def find_two (li,target) :
        global count
        print(count)
        print(li)
        count += 1
        print(len(li)//2)
        middle = len(li) //2
    
        if target < li[middle] :
            left = li [0:middle]
            find_two(left,target)
        elif target < li[middle] :
            right = li [middle+1:]
            print(right)
            find_two(right, target)
        elif li[middle] == target:
            print("find",count)
    
    find_two(l,target)
    View Code

    三.三元表达式

    a if a > b  else b

    如果if后面的条件 成立返回前面的值,否则返回else后面的值

    应用场景:在只有两种情况的条件下

    四.生成式

    1.列表生成式

     格式:[变量名 for 变量名  in 容器类型 if 判断条件]

    l = ['tank','nick','oscar','sean']
    
    res = ["%s_rich" %i for i in l if i.endswith('k')]
    print(res)
    View Code

    2.字典生成式

      格式:{key: value for key: value  in 容器类型 if 判断条件}

    l1 = ['jason','18','dbj']
    res= {i:j for i,j in enumerate(l1) if j != '18'}
    print(res)
    View Code

    3.集合生成式

     格式:{变量名 for 变量名  in 容器类型 if 判断条件}

    print({i for i in range(10) if i != 9})

    4.生成器表达式

     格式:(变量名 for 变量名  in 容器类型 if 判断条件)

    五.匿名函数简介

    匿名函数:没有名字的函数,只能临时使用一次,用完地址就销毁。

     lamba 函数参数 : 函数返回值

    max(dic,key=lambda k:dic[k])

    ps :匿名函数通常会配合其他函数使用。

    六.常用内置函数

    map(func, *iterables)映射函数

    l = [1,2,3,4,5]
    
    print(list(map(lambda y:y+10,l)))  #  容器类型的每一个元素调用前面的函数,并把返回值生成一个新的列表。
    View Code

    zip([iterable, ...]) 压缩函数

    l1 = [1,2,]
    l2 = ['jason','egon','tank']
    l3 = ['a','b','c']
    zipper = list(zip(l1,l2,l3)) 
    # 可以把多了容器类型中的对应的元素,以元祖的形式储存在列表中。返回值是个地址
    #列表的长度取决于,容器类型中最短的那个。可以用list把zip对象转换成列表
    print(zipper)
    print(list(zip(*zipper)))
    #可以用*把zip过程逆转
    View Code

    filter(function, iterable) 过滤函数

    l = [1,2,3,4,5,6]
    print(list(filter(lambda y:y != 10,l)))
    # 通过条件过滤掉不想要的元素,然后生成一个新的列表
    View Code

    sorted(iterable, reverse = bool ):

    l = [1,2,3,4,5,6]
    
    print(sorted(l,reverse=True)) #降序
    print(sorted(l,reverse=False)) #升序
    View Code

    reduce(function, iterable, initia=None)

    使用reduce函数需要from functools import reduce 导入函数

    from functools import reduce
    l = [1,2,3,4,5,6]
    print(reduce(lambda x,y:x+y,l,19))
    #匿名函数获取容器中的前两个值,如果容器非空的话就把初始值放在容器中的第一个
    #然后再取出后面一个值,与和相加,直到拿到所有;列表加默认值之he。
    View Code
  • 相关阅读:
    hibernate的缓存机制
    [poj 3159]Candies[差分约束详解][朴素的考虑法]
    POJ 2773 Happy 2006
    给定一个循环链表,实现一个算法返回这个环的开始结点
    使用jQuery创建模态窗口登陆效果
    实战数据结构(3)_两个单链表间的合并操作
    sql的强大功能(看一条sql解决的复杂业务)
    uva 10905 Children's Game (排序)
    JFinal学习 & Gradle配置续 & Tomcat配置
    Gradle项目学习 & HttpAsyncClient学习 & CountDownLatch学习
  • 原文地址:https://www.cnblogs.com/Cpsyche/p/11184105.html
Copyright © 2011-2022 走看看