匿名函数、冒泡排序,二分法, 递归

匿名函数
lambda 匿名函数  格式 lambda 参数:返回值   函数名统一叫lambda,最多只能写一行

普通的正常的函数
def func(n):
    return n * n
lambda匿名函数写法
a = lambda n : n**2
print(a(3))
当有多个返回值时

suiyi = lambda x, y : (1, 2) # 笔试题       返回值有多个要用(),返回值时已元组方式返回的
print(suiyi)                            #==》<function <lambda> at 0x03713420>
print(suiyi(250,38))                 #==》(1, 2)


递归
在函数中调用自己,python最大递归层数是1000,不到1000就会提前报错,sys.setrecursionlimit(10000000),可以更改递归最大层数

import sys
sys.setrecursionlimit(10000000)
n = 0
def story():
    global n
    n += 1
    print(n)
    story()
story()
遍历 D:/sylar文件夹, 打印出所有的文件和普通文件的文件名

import os
def func(filepath, n): # d:/sylar/
    # 1,打开这个文件夹
    files = os.listdir(filepath)
    # 2. 拿到每一个文件名
    for file in files: # 文件名
        # 3. 获取到路径
        f_d = os.path.join(filepath, file) # d:/sylar/文件名/
        # 4. 判断是否是文件夹
        if os.path.isdir(f_d):
                # 5. 如果是文件夹. 继续再来一遍
                print("\t"*n, file,":") # 打印文件名
                func(f_d, n + 1)#如果是文件夹继续循环调用
        else: # 不是文件夹. 普通文件
            print("\t"*n, file)

func("d:/sylar",0)


二分法查找
二分法思想:二分法的序列必须是有序的,从小到大排序,先和中间的比较大小如果比中间的值大,则所取值在右侧,左边值右移,如此循环比较

lst = [22, 33, 44, 55, 66, 77, 88, 99, 101 , 238 , 345 , 456 , 567 , 678 , 789]

def fun(n):
    left = 0
    right = len(lst) - 1

    while lst[left] <= lst[right]:
        mid = (left+right) // 2
        if n > lst[mid]:
            left = mid + 1
        if n < lst[mid]:
            right = mid - 1
        if n == lst[mid]:
            print('yes', mid)
            break
    else:
        print('no')

fun(101)

冒泡排序
lst = [22, 13, 44, 55, 66, 77, 88, 99, 101 , 8 , 345 , 456 , 57 , 678 , 789]


def fun(lst):
    for i in range(len(lst)):
        for i in range(len(lst)-1):
            if lst[i] > lst[i+1]:
                lst[i], lst[i + 1] = lst[i+1], lst[i]
    return lst

print(fun(lst))

猜你喜欢

转载自www.cnblogs.com/Mr-wangxd/p/9482166.html
今日推荐