今日内容概要
- 算法简介及而二分法
- 三元表达式
- 各种生成式
- 匿名函数
- 重要内置函数
- 常见内置函数
内容详细
算法简介及二分法
算法(概念了解)
- 什么是算法
算法就是解决问题的有效方法 不是所有的算法都很高效 也有不合格的算法
- 算法应用场景
推荐算法(抖音视频推送 淘宝商品推送)
成像算法(AI相关)......
几乎涵盖了我们日常生活中的方方面面
- 算法的条件
输入性, 输出性,明确性, 有限性,有效性
- 时间复杂度
O(1)< O(login)<O(n)<O(n^2)<O(n!)
- 常见的大O运行时间(n一般为元素的个数):
- O(logn):对数时间,例如:二分查找
- O(n): 线性时间,简单查找
- O(nlogn): 快速排序
- O(n^2):选择排序
- O(n!):旅行商问题解决方案##
二分法
二分法是一个高效的算法 用于计算机的查找过程中
| 1.使用要求 |
| 二分法查找依赖的是顺序结构表,数组 |
| |
| 查找针对的是有序数据 所以只能用插入、删除操作不频繁,一次性多次查找的场景中 |
| 2.二分法的缺陷 |
| 针对开头结尾的数据 查找效率很低 |
| 常见算法的原理以及伪代码 |
| """数据量太小不适合二分查找,与直接遍历相比效率提升不明显。但有一个例外,就是数据之间的比较操作非常费时,比如数组中存储的都是组成长度超过100的字符串。 |
| """ |
| 3.一般要求找到某一个值或一个位置。 |
二分法代码示例
| l1 = [12, 21, 32, 43, 56, 76, 87, 98, 123, 321, 453, 565, 678, 754, 812, 987, 1001, 1232] |
| |
| |
| |
| def get_middle(l1, targer_num): |
| if len(l1) == 0: |
| print('没找到') |
| return |
| |
| middle_index = len(l1) // 2 |
| |
| if targer_num > l1[middle_index]: |
| |
| right_l1 = l1[middle_index+1:] |
| print(right_l1) |
| |
| return get_middle(right_l1, targer_num) |
| elif targer_num < l1[middle_index]: |
| |
| left_l1 = l1[:middle_index] |
| print(left_l1) |
| return get_middle(left_l1, targer_num) |
| else: |
| print('恭喜你找到了') |
| |
| |
| get_middle(l1, 754) |
三元表达式
| |
| name = 'jason' |
| if name == 'jason':print('老师') |
| else:print('学生') |
| |
| |
| res = '老师' if name == 'jason' else '学生' |
| print(res) |
| """ |
| 数据值1 if 条件 else 数据值2 |
| 条件成立则使用数据值1 条件不成立则使用数据值2 |
| |
| 当结果是二选一的情况下 使用三元表达式比较简便 |
| |
| 不推荐多个三元表达式嵌套 |
| """ |
各种生成式/表达式/推导式
| 给所有列表的人名的后面加上_NB的后缀 |
| |
| |
| |
| |
| |
| |
| new_list = [name + '_nb' for name in namelist] |
| print(new_list) |
| |
| |
| new_list = ['大佬' if name == 'wei' else '小赤佬' for name in namelist if name != 'jason'] |
| print(new_list) |
| |
-
列表生成式
先看for循环 每次for循环之后再看for关键字前面的操作
-
字典生成式

| s1 = 'hello world' |
| for i, j in enumerate(s1): |
| print(i, j) |
| d1 = {i: j for i, j in enumerate('hello')} |
| print(d1) |
-
集合生成式
| res = {i for i in 'hello'} |
| print(res) |
匿名函数
| 没有名字的函数 需要使用关键字lambda |
| 语法结构 |
| lambda 形参:返回值 |
| 使用场景 |
| lambda a,b:a+b |
| 匿名函数一般不单独使用 需要配合其他函数一起用 |
常见内置函数
| 1.map() 映射 |
| l1 = [1, 2, 3, 4, 5] |
| |
| |
| 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=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) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构