算法简介及二分法
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
标签:name,res,算法,二分法,匿名,l1,print,三元
From: https://www.cnblogs.com/lsl1/p/16789635.html