今日内容回顾

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

今日内容详解

算法简介及二分法

1.什么是算法

算法就是解决问题的有效方法  不是所有的算法都很高效也有不合格的算法

2.算法应用场景

我们生活中充满了算法,几乎涵盖了我们生活中的方方面面
推荐算法:抖音推送  购物app的产品推荐
成像算法:AI相关,医药学之类

3.二分法

是算法中最简单的算法 甚至都称不上算法

1.二分法的使用要求
    待查找的数据集必须有序
2.二分法的缺陷
   针对开头和结尾的数据 查找效率很低

实现二分法的代码:

l1 = [12, 21, 32, 43, 56, 76, 87, 98, 123, 321, 453, 565, 678, 754, 812, 987, 1001, 1232]
target_num = 987
def get_middle(l1,target_num):
    # 添加一个结束条件
    if len(l1) == 0:
        print('很抱歉没有找到')
        return
    # 1.获取列表中间的索引值
    middle_index = len(l1) // 2
    # 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, 987)

三元表达式

1.语法结构:
   数据1 if 条件 else 数据2
   条件成立立即使用数据值1 条件不成立立刻使用数据2
2.什么场景用比较合适:
   当结果是二选一的情况下 使用三元表达式较为简便
  并且不推荐多个三元表达式嵌套
 3.正常编写和三元表达式的对比代码实现:
   # 简化步骤:代码简单并且只有一行 那么可以直接在冒号后面编写
  name = 'jamer'
  if name == 'jamer':print('老师')
  else : print('学生')
   # 三元表达式: 
    name = 'jamer'
    res = 'teacher' if name == 'jamer' else 'student'
    print(res)

各种生成式

1.列表生成式

name_list = ['jason', 'kevin', 'oscar', 'tony', 'jerry']
# # 要求给列表中所有人名后面加上_NB的后缀
# # 方式1: for循环
new_list = []
# for i in name_list:
#     data = f'{i}_NB'
#     new_list.append(data)
#     # new_list.append(i + '_NB') 这样写等同于上面的形式
#
# print(new_list)
# 方式2.列表生成式
# 大致流程 先看for循环 每次for循环之后再看for关键字前面的操作
# new_list =[name + "_nb" for name in name_list]
# print(new_list)
# 复杂情况
# new_list = [name + "_nb"for name in name_list if name == 'jason']
# print(name_list)
new_list = ['大佬' if name == 'jason' else '小佬' for name in name_list if name != 'jamer']
print(new_list)


2.字典生成式

补充:

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中

s1 = 'hello world'
# for i,j in enumerate(s1,):
#     print(i,j)

字典生成式

s1 = 'hello world'
d1 = {i:j for i,j in enumerate('hello')}
print(d1)

3.集合生成式

# 集合生成式
res = {i for i in 'hello'}
print(res)

4.元组生成式>>>:没有元组生成式 下列的结果是生成器

 res = (i+'SB' for i in 'hello')
print(res)
 for i in res:
print(i)

匿名函数

没有名字的函数 需要使用关键字lambda

1.语法结构
   lambda 形参 :返回值
2.使用场景
   lambda a,b:a+b
   匿名函数一般不单独使用 需要配合其他函数一起用

常见内置函数

1.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)
    
d1 = {
    'zj': 100,
    'jason': 8888,
    'berk': 99999999,
    'oscar': 1
}
    def func(a):
        return d1.get(a)
    # res = max(d1, key=lambda k: d1.get(k))
    res = max(d1, key=func)
    print(res)
3.reduce
# reduce  传多个值 返回一个值
    from functools import reduce
    l1 = [11, 22, 33, 44, 55, 66, 77, 88]
    res = reduce(lambda a, b: a * b, l1)
    print(res)

原文地址:http://www.cnblogs.com/zjl248/p/16789614.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性