- 算法简介及二分法
- 三元表达式
- 各种生成式
- 匿名函数
- 重要内置函数
- 常见内置函数
今日内容详细
算法简介及二分法
1.什么是算法
算法就是解决问题的有效方法 不是所有的算法都很高效也有不合格的算法
2.算法应用场景
推荐算法(抖音视频推送 淘宝商品推送)
成像算法(AI相关)......
几乎涵盖了我们日常生活中的方方面面
3.算法工程师要求
待遇非常好 但是要求也非常高
4.算法部门
不是所有的互联网公司都养得起算法部分 只有大型互联网公司才有
算法部门类似于药品研发部分
5.二分法
是算法中最简单的算法 甚至都称不上是算法
"""
二分法使用的要求:
待查找的数据必须有序
二分法的缺陷:
针对查找开头或者结尾的数据,查找效率很低
常见算法的原理以及伪代码:
二分法、冒泡、快拍、插入、堆排、桶排、数据结构(链表 约瑟夫问题 如何链表是否成环)
"""
l1 = [12, 21, 32, 43, 56, 76, 87, 98, 123, 321, 453, 565, 678, 754, 812, 987, 1001, 1232]
# 查找列表中某个数据值
# 方式1:for循环直到找到这个值
# for i in l1:
# if i == 987:
# print('找到987')
# 方式2:二分法,不断的对数据集做二分切割
"代码实现二分法"
# 定义我们想要查找的数据值
# seek_num = 987
def index(a, b):
middle_num = len(a) // 2 # 先看赋值右边,查看列表l1的数据有多少个,然后将这个个数进行整除赋值给右边
if len(a) == 0:
print('抱歉没找到')
return
if b > a[middle_num]: # 用987这个数据值跟列表索引中间的数据值比对
middle_pluse_num = a[middle_num + 1:] # 这句话是将列表l1按照中间的值切割,并赋值给右边的变量名
return index(middle_pluse_num, b) # 继续调用函数
elif b < a[middle_num]: # 用987这个数据值跟列表索引中间的数据值比对
middle_pluse_num = a[:middle_num] # 赋值左边表示切割l1从0开始到中间结束不包含最后一个
return index(middle_pluse_num, b) # 继续调用函数
else:
print('找到987')
index(l1, 987)
三元表达式
简化步骤1:代码简单并且只有一行,那么可以直接在冒号后面写编写
name= 'jason'
# if name == 'jason':
# print('老师')
# else:
# print('学生')
# 三元表达式
res = '老师' if name == 'jason' else '学生'
print(res)
"""
数据值1 if条件 else 数据值2
条件成立则使用数据值1 条件不成立则使用数据值2
当结果是二选一的情况下,使用三元表达式较为简便并且不推荐多个三元表达式嵌套
"""
各种生成式
name= 'jason'
if name == 'jason':
print('老师')
else:
print('学生')
三元表达式
res = '老师' if name == 'jason' else '学生'
print(res)
name_list = ['jason', 'kevin', 'oscar', 'tony', 'jerry']
给列表所有人名的后面加上_NB的后缀
方法一:for循环
定义一个新的列表
new_list = []
for i in name_list: # fou循环获取每一个数据值
new_list.append(f'{i}_NB') # 这里用到了列表尾部添加内置方法,format格式化输出
print(new_list)
方法二:列表生成式
new_list = [name + 'NB' for name in name_list] # 中括号内先循环获得name然后指定前面的name+NB,以列表的形式出现
print(new_list)
name_list = [name + '大老婆' for name in name_list]
print(name_list)
new_list = ['大老婆'if i == 'jason' else '小老婆'for i in name_list if i != 'jason']
print(new_list)
字典生成式
s1 = 'hello word'
for i, j in enumerate(s1, start=50):
print(i, j)
d1 = {i: j for i, j in enumerate('hello', start=100)}
print(d1)
集合生成式
set = {i for i in 'hello'}
print(set)
匿名函数
没有名字的函数 需要使用关键字lambda
语法结构
lambda 形参:返回值
使用场景
lambda a,b:a+b
匿名函数一般不单独使用,需要配合其他函数一起用
常见内置函数
1.map() 映射
l1 = [1, 2, 3, 4, 5]
def func(a):
return a + 1
res = map(func, l1)
for i in res:
print(i)
# for循环的方式
for i in l1:
i += 1
print(i)
2.max()\min()
# l1 = [11, 22, 33, 44]
# res = max(l1) # max用来判断最大值赋值给变量名res
# print(res)
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)
作业
# 有下列用户数据
user_data = {
'1': {'name': 'jason', 'pwd': '123', 'access': ['1', '2', '3']},
'2': {'name': 'kevin', 'pwd': '321', 'access': ['1', '2']},
'3': {'name': 'oscar', 'pwd': '222', 'access': ['1']}
}
# 直接先写装饰模板.0
enter_is = False # 定义一个全局变量
def outer_pluse(a):
def outer(func_name):
def inner(*args, **kwargs):
global enter_is # global作用是局部可以修改全局变量
if enter_is:
if a in user_data.get(enter_is).get('access'):
res = func_name(*args, **kwargs)
return res
else:
print('您暂时没有该权限')
return
username = input('请先登录您的账号>>>:').strip()
password = input('请输入您的密码校验权限>>:').strip()
for i in user_data:
if username == user_data.get(i).get('name') and password == user_data.get(i).get('pwd'): # 判断用户名密码
print('用户名密码校验成功')
enter_is = i # 修改全局变量,这样不用再次登录
if a in user_data.get(i).get('access'):
res = func_name(*args, **kwargs)
return res
else:
print('您没有该权限')
else:
print('账号或密码错误')
return
return inner
return outer
# 并有三个函数
@outer_pluse('1')
def func1():
print('func1')
@outer_pluse('2')
def func2():
print('func2')
@outer_pluse('3')
def func3():
print('func3')
func_dict = {'1': func1,
'2': func2,
'3': func3}
while True:
print("""
1.执行函数 func1
2.执行函数 func2
3.执行函数 func3
""")
choise = input('请输入您想要执行的参数>>>:').strip()
func_dict.get(choise)()
标签:内置,name,res,list,算法,l1,print,三元,表达式
From: https://www.cnblogs.com/zhanghong1229/p/16789784.html