算法简介及二分法

1.什么是算法
	算法就是解决问题的有效方法 不是所有算法都很高效也有不合格的算法
2.算法应用场景
	推荐算法:比如抖音
    成像算法:AI相关
    几乎覆盖了生活的方方面面
3.二分法
	是算法中最简单的算法 甚至称不上算法
"""
二分法的使用要求
	要查找的数据集必须时有序的
二分法的缺陷
	针对开头结尾的数据查找效率很低
常见算法的原理以及伪代码
	二分法	冒泡 快拍 插入 堆排 桶排 数据结构(链表 约瑟夫问题 如何链表是否成坏)
"""
查找算法:
1.for循环遍历一次就可以解决
    比如说有一个列表l1 = [12, 21, 32, 43, 56, 76, 87, 98, 123, 321, 453, 565, 678, 754, 812, 987, 1001, 1232]
for num in l1:  # 逐一遍历
    if num == 123:
        print('找到了')
        break
else:
    print('没找到')我想找到123
2.二分法:
def get_midd(l1, target_num):
    if len(l1) == 0:
        print('抱歉没找到')
        return
    midd_index = len(l1)  # 获取列表索引值
    if target_num > l1[midd_index]:  # 比索引中间大小
        right_l1 = l1[midd_index + 1:] # 切片保留右半边
        print(right_l1)
        return get_midd(right_l1, target_num)
    elif target_num < l1[:midd_index]:   # 保留另一半
        left_l1 = l1[:midd_index]
        print(left_l1)  # 针对左边另一半继续二分
        return get_midd(left_l1, target_num)
    else:
        print('找到了')
# get_middle(l1, 987)
# get_middle(l1, 2000)
# get_middle(l1, 12)       

三元表达式

简化步骤1:     代码简单只有一行直接冒号后写
    name = 'linux'
    if name == 'linux':
        print('老师')
    else:
        print('学生')
 三元表达式  # 看的非常的简洁
	res = '老师' if name == 'linux' else '学生'
    print(res)
    
"""
数据值1 if 条件 else 数据值2
条件成立则使用数据值1 条件不成立则使用数据值2

当结果是二选一的情况下 使用三元表达式较为简便
并且不推荐多个三元表达式嵌套
"""    

生成式

name_list = ['jason', 'kevin', 'oscar', 'tony', 'jerry']
# 给列表中所有人名的后面加上_NB的后缀
for循环
new_list = []
for name in name_list:
    data = f'{name}_NB'
    new_list.append(data)
print(new_list)
1.列表生成式:
    # 每次for循环之后再看for循环关键字前面的操作
    new_list = [name + "_NB" for name in name_list]
    print(new_list)
2.字典生成式
    s1 = 'hello world'
    for i,j in enumerate(s1,start=100):
        print(i,j)
    d1 = {i: j for i, j in enumerate('hello')}
    print(d1)
3.集合生成式
    res = {i for i in 'hello'}
    print(res)  
    

匿名函数

没有名字的函数 需要使用关键字# lambda
语法结构
	lambda 形参:返回值
使用场景
	lambda a,b:a+b
匿名函数一般不单独使用 需要配合其他函数一起用

常见内置函数

1.map()  # 映射
	.map()	映射
    l1 = [1, 2, 3, 4, 5]
    # def func(a):
    #     return a + 1
    res = map(lambda x:x+1, l1)   #使用匿名函数
    print(list(res))

2.max()  min()    #最大最小值
    
    l1 = [11, 22, 33, 44]
    res = max(l1)  # 44

	# 映射关系比较
    d1 = {
        'leethon': 100,
        'jason': 8888,
        'lalisa': 99999999,
        'alex': 1000
    }
    # def func(a):  # 传键
    #     return d1.get(a)  # 字典的返回值
    # res = max(d1, key=func)  # key后面跟函数

    res = max(d1, key=lambda k: d1.get(k))  # 根据键值来比较
    print(res)  # lalisa  # 返回的是键

3.reduce    # 传多个值 返回一个值
    from functools import reduce # 导入模块  
    l1 = [11, 22, 33, 44, 55, 66, 77, 88]
    res = reduce(lambda a, b: a * b, l1)#以元组形式计算列表
  	print(res)  # 396    
posted on 2022-10-13 20:52  猪小坤  阅读(42)  评论(0)    收藏  举报