算法 生成式 函数内置

今日内容概要

  • 算法简介及二分法
  • 三元表达式
  • 各种生成制
  • 匿名函数
  • 重要内置函数
  • 常见内置函数

算法简介及二分法

1.什么算法?
	解决问题的有效方法,不是所有的算法都是高效 也有不合格的算法
2.算法应用场景
	推荐算法(抖音视频推送 淘宝商品推送 )
    成像算法(AI相关)
    几乎涵盖了生活的方方面面
3.算法工程师要求
	待遇非常好 但是要求非常高(985+硕士研究生起步,一般高校优秀毕业生)
4.算法部门
	不是所有的互联网公司养得起算法部门,只有大型互联网公司有,算法部门类似于药品研发部门
4.二分法是什么?
	定义:二分法是算法里面的最简单的算法
	要求:待查找的数据集必须有序;待查找的的数据不能在开头或者结尾出现
	原理:不断的对数数据集做二分切割
	缺陷:针对开头结尾 查找效率很低
5.常见的算法原理以及伪代码
	二分法 冒泡 快拍 插入 地推 桶排 数据结构(链表 约瑟夫问题 如何判断链表是否成环)
	
6.二分法使用案例

    # 现在有个需求:查找列表中的某个数
    l1 = [21, 76, 84, 91, 122, 132, 231, 334, 665,736, 873, 927, 987, 999]
    # 方式1:for 循环 ,次数比较多
    # 方式2:二分法 不断地对数据集进行二分切割

    # 首先定义我们想要的查找的数据值
    target_num = 873
    def get_middle(l1, target_num):
        # 添加一个结束条件
        if len(l1) == 0:
            print('很抱歉 没有找到')
            return
        # 1.获取列表中间的索引值
        middle_index = len(l1) // 2
        print(middle_index)
        # 2.比较目标数据值与中间索引值的大小
        if target_num > l1[middle_index]:
            # 切片保留列表右边的一半
            right_l1 = l1[middle_index +1:]
            print(right_l1)
            # 针对右边一半的列表继续二分并判断 >>>: 感觉要用递归函数
            return get_middle(right_l1, target_num)
        elif target_num < l1[middle_index]:
            # 切片保留列表左边的一半
            left_l1 = l1[:middle_index]
            print(left_l1)
            # 针对左边一半的列表继续二分并判断 >>>: 感觉要用递归函数
            return get_middle(left_l1, target_num)
        else:
            print('恭喜你找到了')


            # get_middle(l1, 873)
            # get_middle(l1, 111)
            # get_middle(l1, 21)  

三元表达式

1.语法结构:
	# 数据值1 if 条件 else 数据值2
"""
条件成立立即使用数据值1否则使用数据值2
应用场景:二选一
尽量不要嵌套使用
"""

# 简化步骤:代码简单并且只有一行那么就可以直接在冒号后面编写
# name = 'almira'
# if name == 'almira':print('美女')
# else:print('丑八怪')
# 三元表达式
# res = '美女' if name == 'almira' else '丑八怪'
# print(res)
# res = '美女' if name == 'almira' else '学生' if 1 ==2 else 'hahaha'
# print(res)


is_free = input('电影是否收费>>>:').strip()
rse = '收费' if is_free == 'y' else '免费'
print(res)

列表生成式


    # 需求:列表中所有人的名字后面加上_SB的后缀
    # 方案一:for循环
        name_list = ['almira', 'lina', 'rudy', 'judy']
        new_list = []
        for name in name_list:
            data = f'{name}_SB'
            new_list.append(data)
        print(new_list)

    # 方案二:列表生成式
        new_list = [name + "_SB" for name in name_list]
        print(new_list)

字典生成式

    s1 = 'beautiful'
    for i, j in enumerate(s1, start=100):
        print(i,j)
    d1 = {i:j for i in enumerate('beautiful')}
    print(d1)

集合生成式

    res = {i for i in 'beautiful'}
    print(res)

元组生成式>>>生成器*****

    res = (i + 'sb' for i in 'baby')
    print(res)
    for i in res:
        print(i)

匿名函数

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

常见内置函数

 1.map() 映射  
    l1 = [1, 2, 3, 4, 5, 6, 5]
    def func(a):
        return a + 1
    res = map(lambda x:x+1, l1)
    print(list(res))
2.max()/min() 最大/最小值
    l1 = [1, 2, 3, 4, 5, 6, 5]
    res = max(l1)
    print(res)

    d1 = {
        'almira':20000,
        'lida':2122,
        'judy':1212,
    }
    res = max(d1, key=lambda k:d1.get(k))
    print(res)
    
 3.reduce 传多个值 返回一个值
    from functools import reduce
    l1 = [21, 43, 65, 87, 98, 76, 54]
    res = reduce(lambda a, b: a + b, l1)
    print(res)
posted @ 2022-10-13 20:18  阿丽米热  阅读(30)  评论(0编辑  收藏  举报
Title