算法简介及二分法

1.什么是算法
算法就是解决问题的有效方法 不是所有的算法都很高效也有不合格的算法
2.算法应用场景
推荐算法(抖音视频推送 淘宝商品推送)
成像算法(AI相关)......
几乎涵盖了我们日常生活中的方方面面
3.算法工程师要求
待遇非常好 但是要求也非常高
4.算法部门
不是所有的互联网公司都养得起算法部门 只有大型互联网公司才有
算法部门类似于药品研发部门
5.二分法
是算法中最简单的算法 甚至都称不上是算法
"""
二分法使用要求
待查找的数据集必须有序
二分法缺陷
针对开头结尾的数据 查找效率很低
常见算法的原理以及伪代码
二分法、冒泡、快排、插入、堆排、统排、数据结构(链表 约瑟夫问题 如何链表是否成环
"""

查找列表中某个数据值

# 方式1:for循环 次数较多
# 方式2:二分法 不断的对数据集做二分切割 '''代码实现二分法'''
l1 = [12, 21, 32, 43, 56, 76, 87, 98, 123, 321, 453, 565, 678, 754, 812, 987, 1001, 1232]
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)
if target_num < l1[middle_index]:
# 切片保留列表左边一半
lift_l1 = l1[:middle_index]
print(lift_l1)
# 针对左边一般的列表继续二分并判断
return get_middle(lift_l1,target_num)
else:
print('恭喜你 找到了') # get_middle(l1,987)
get_middle(l1,10000)

三元表达式

# 简化步骤1: 代码简单并且只有一行 那么可以直接在冒号后面编写
name = 'jason'
# if name == 'jason':print('老师')
# else:print('学生') # 三元表达式
res = '老师' if name == 'jason' 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)
# 列表生成式
# 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(new_list)
new_list = ['大佬' if name == 'jason' else '小赤佬' for name in name_list if name != 'berk']
print(new_list) # 字典生成式
# s1 = 'hello'
# for i,j in enumerate(s1):
# print(i, j) 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) # 元组没有生成式: 下列的结果是生成器
res = (i+'sb' for i in 'hello')
print(res)
for i in res:
print(i)

匿名函数

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

昨天作业

1.利用递归函数依次打印列表中每一个数据值

l1 = [1, [2, [3, [4, [5, [6, [7, [8, ]]]]]]]]

# 方法1:胡
def print_item(l):
print(l[0])
if len(l) == 1:
return l[0]
return print_item(l[1])
print_item(l1) # 方法2:老师讲 print(isinstance(123,int)) # 判断第一个数据值是不是属于第二个参数指定的数据类型 True
print(isinstance(123,str)) # 判断第一个数据值是不是属于第二个参数指定的数据类型 False def get_num(l1):
for i in l1:
if isinstance(i, int):
print(i)
else:
return get_num(i)
get_num(l1)

2.利用有参装饰器编写多种用户登录校验策略

def login_auth(condition):
def outer(func_name):
def inner(*args,**kwargs):
# 获取用户名和密码
username = input('please input your username>>>:').strip()
password = input('please input your password>>>:').strip()
# 判断校验的策略
if condition == 'absolute':
if username == 'jason' and password == '123':
res = func_name(*args, **kwargs)
return res
else:
print('用户名和密码错误')
elif condition == 'list_type':
user_list = ['jason|123', 'tony|321', 'kevin|222']
user_data = f'{username}|{password}'
if user_data in user_list:
res = func_name(*args, **kwargs)
return res
else:
print('用户名和密码错误')
elif condition == 'file_type':
# 这里是一个文件 创建一个userinfo.txt的文本文件 里面分行填写jason|123, tony|321,kevin|222
with open(r'userinfo.txt','r',encoding='utf8')as f:
for line in f:
real_name, real_pwd = line.split('|')
if real_name == username and real_pwd.strip('\n') == password:
res = func_name(*args, **kwargs)
return res
return inner
return outer @login_auth('absolute')
def index(*args,**kwargs):
print('form index') @login_auth('list_type')
def func(*args,**kwargs):
print('from func') @login_auth('file_type')
def func1(*args,**kwargs):
print('from func1') index()
func()
func1()

python进阶之路13 二分法 三元表达式 各种生成式 匿名函数的更多相关文章

  1. python之三元表达式与生成式与匿名与内置函数(部分)

    目录 三元表达式 各种生成式 列表生成式(可同样作用于集合) 字典生成式 匿名函数 重要内置函数 map() zip() filter() reduce() 常见内置函数(部分) 三元表达式 三元表达 ...

  2. Python 函数递归-三元表达式-列表生成式-字典生成式-匿名函数-内置函数

    上节课复习: 1. 无参装饰器 def 装饰器名字(func): def wrapper(*args,**kwargs): res = func(*args,**kwargs) return res ...

  3. python递归-三元表达式-列表生成式-字典生成式-匿名函数-部分内置函数-04

    递归 递归: # 函数在调用阶段直接或间接地又调用了自身 应用场景: # 将列表中的数字依次打印出来(循环的层数是你必须要考虑的点)   -->  l = [1, [2, [3, [4, [5, ...

  4. Python开发基础-Day9-生成器、三元表达式、列表生成式、生成器表达式

    生成器 生成器函数:函数体内包含有yield关键字,该函数执行的结果是生成器,生成器在本质上就是迭代器. def foo(): print('first------>') yield 1 pri ...

  5. Python-递归、三元表达式列表生成式等

    一.函数递归 1.什么是函数递归:函数的递归调用是函数嵌套的一种特殊形式,在调用一个函数的过程中又直接或者间接地调用该函数本身,称之为函数的递归调用 2.递归调用必须明确的两个阶段: 1.回溯:一次次 ...

  6. 【Python进阶】来谈谈几个常用的内置函数

    匿名函数(lambda表达式) 在Python中,函数可以算的上是“一等公民”了,我们先回顾下函数的优点: 减少代码重复量 模块化代码 但是我们有没有想过,如果我们需要一个函数,比较简短,而且只需要使 ...

  7. python之路--day13---函数--三元表达式,递归,匿名函数,内置函数-----练习

    1.文件内容如下,标题为:姓名,性别,年纪,薪资 egon male 18 3000 alex male 38 30000 wupeiqi female 28 20000 yuanhao female ...

  8. Python学习之路13☞常用模块

    一 time模块 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行“type(t ...

  9. Python全栈之路3--set集合--三元运算--深浅拷贝--初识函数

    一.上节课的重点回顾: 1.类名加括号其实就是执行类的__init__方法: 2.int a.创建方式 n1 = 123 #根据int类创建了一个对象 n2 = int(123) #根据int类创建一 ...

  10. Python进阶之路---1.5python数据类型-字符串

    字符串 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; ...

随机推荐

  1. HTML+CSS基础知识(5)相对定位、绝对定位、固定定位

    文章目录 1.相对定位 1.1 代码 1.2 测试结果 2.绝对定位 2.1 代码 2.2 测试 3.固定定位 3.1 代码 3.2 测试结果 1.相对定位 1.1 代码 <!DOCTYPE h ...

  2. 泛化之美 —— C++11 可变参数模板的妙用

    概述 首先这篇文章出自博客园作者:[qicosmos ],我对本文的实例代码进行了学习.思考和整理纠正,理清了文章的全部细节,觉得这是一篇让我受益匪浅的文章.之所以会接触「可变参数模板」这部分的内容, ...

  3. 企业级自定义表单引擎解决方案(十六)--Excel导入导出

    Excel对于后端管理系统来说,永远都是绕不开的话题,开发Excel导入导出功能往往都比较麻烦,因为涉及到Excel导入模板制作.Excel表格数据与系统数据库表字段映射.Excel导入数据验证.验证 ...

  4. JS数据结构与算法-栈结构

    一.认识栈结构 栈也是一种非常常见的数据结构,并且在程序中的应用非常广泛 数组 我们知道数组是一种线性结构,并且可以在数组的任意位置插入和删除数据. 但是有时候,我们为了实现某些功能,必须对这种任意性 ...

  5. created与mounted执行顺序(关于微任务与宏任务)

    1.ps:只要你只使用created或者mounted中的一个不就好了吗[dog].这样只要在第一个异步任务代码跳出前,嵌套第二个任务函数就好了 最后面的两个链接一个是微任务与宏任务的通俗例子,一个是 ...

  6. 从 洛谷P5309 Ynoi2011 初始化 看卡常

    一般情况下,程序运行消耗时间主要与时间复杂度有关,超时与否取决于算法是否正确. 但对于某些题目,时间复杂度正确的程序也无法通过,这时我们就需要卡常数,即通过优化一些操作的常数因子减少时间消耗. 比如这 ...

  7. 修改api-server支持的NodePort端口映射范围

    创建svc资源报错显示:provided port is not in the valid range. The range of valid ports is 30000-32767 k8s集群默认 ...

  8. 金山云:基于 JuiceFS 的 Elasticsearch 温冷热数据管理实践

    01 Elasticsearch 广泛使用带来的成本问题 Elasticsearch(下文简称"ES")是一个分布式的搜索引擎,还可作为分布式数据库来使用,常用于日志处理.分析和搜 ...

  9. .NET MAUI 安卓应用开发初体验

    一..NET MAUI开发环境搭建&安卓SDK和安卓模拟器安装提示网络连接失败问题解决 引言 本节目标是帮助第一次搭建.NET MAUI开发环境,在下载安卓SDK和安卓模拟器过程中一直提示网络 ...

  10. python3的可迭代对象与迭代器对象

    可迭代对象与迭代器对象 通过一段简单的代码来理解这俩个概念 a = [1,2,3,4] for i in a: print(i) 这段代码很简单, 对 a 这个列表进行遍历, 然后打印输出每个元素, ...