算法简介

1.什么是算法
	算法就是解决问题的有效方法 不是所有的算法都很高效也有不合格的算法
2.算法的应用场景
	推荐算法(抖音视频推送 淘宝商品推送)
    成像算法(AI相关)....
    几乎涵盖了我们日常生活中的方方面面
3.算法工程师要求
	待遇好,要求高

二分法

1.什么是二分法
	是算法中最简单的算法 甚至称不上是算法

"""
二分法使用要求
	待查找的数据集必须有序
二分法的缺陷
	针对开头结尾的数据 查找效率低
常见的算法原理以及伪代码
	二分法、冒泡、快拍、插入、堆排、桶排、数据结构(链表 约瑟夫问题 如何链表是否成环)
"""

l1=[12,34,45,62,73,84,99,123,321,415,543,654,754,867,934]
# 定义我们想要查找的数据值
# target_num = 415

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]:
        # 3.切片保留列表右边一半
        right_l1 = l1[middle_index + 1:]
        print(right_l1)
        # 4.针对右边一半的列表继续二分并判断 >>>: 感觉要用递归函数
        return  get_middle(right_l1,target_num)
    elif target_num < l1[middle_index]:
        # 5.切片保留列表左边一半
        left_l1 = l1[:middle_index]
        print(left_l1)
        # 6.针对左边一半的列表继续二分并判断 >>>: 感觉要用递归函数
        return get_middle(left_l1,target_num)
    else:
        print(l1[middle_index])

#get_middle(l1,99)
#get_middle(l1,415)

三元表达式

# 简化步骤1:代码简单并且只有一行 那么可以直接在冒号后边编写
name = 'moon'
# if name == 'moon':print('老师')
# else:print('学生')

# 三元表达式
res = '老师' if name == 'jason' else '学生'
print(res)
"""
数据值1 if 条件 else 数据值2
条件成立则使用数据值1 条件不成立则使用数据值2

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

各种生成式/表达式/推导式

name_list = ['jason','kevin','tony','jerry']
#给列表中所有人名后面加上_NB的后缀

#for循环
new_list = []
for name in name_list:
    data = f'{name}_NB'
    new_list.append(data)
print(new_list)
列表生成式
name_list = ['jason','kevin','tony','jerry']

#先看for循环 每次for循环之后再看for关键字前面的操作
new_list = [name + "_NB" for name in name_list]
print(new_list)
# ['jason_NB', 'kevin_NB', 'tony_NB', 'jerry_NB']

#复杂情况
new_list = [name + "_NB" for name in name_list if 	name =='jason']
print(new_list)
# ['jason_NB']

new_list = ['大佬' if name == 'jason' else '小赤佬'
for name in name_list if name != 'jack']
print(new_list)
# ['大佬', '小赤佬', '小赤佬', '小赤佬']
字典生成式
s1 = 'hello'
for i,j in enumerate(s1,start=0):
    print(i,j)
  #0 h
  #1 e
  #2 l
  #3 l
  #4 o 
d1 = {i: j for i, j in enumerate('hello')}
print(d1)
# {0: 'h', 1: 'e', 2: 'l', 3: 'l', 4: 'o'}
集合生成式
res = {i for i in 'hello'}
print(res)
# {'h', 'o', 'e', 'l'}
元组生成式>>>:没有元组生成式 下列的结果是生成器(后面会讲)
res = (i+'SB' for i in 'hello')
print(res)
for i in res:
    print(i)
	# hSB
	# eSB
	# lSB
	# lSB
	# oSB

匿名函数

没有名字的函数 需要使用关键字lambda
语法结构
	lambda 形参:返回值
使用场景
	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/super-xz/p/16789604.html

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