python基础知识

589 阅读3分钟

算法简介之二分法

* 什么是算法:算法就是解决问题的有效方法  不是所有的算法都很高效
* 算法应用场景:
         推荐算法 像抖音推送 淘宝商品推送
         成像算法 AI相关
         算法几乎是覆盖了我们日常生活中的方方面面
* 二分法:是算法中最简单的算法  甚至都称不上是算法
* 二分法使用要求:待查找的数据集必须有序
* 二分法的缺陷:针对开头结尾数据 查找效率很低
* 常见算法的原理以及伪代码
    二分法  冒泡  快拍  插入 桶排  数据结构(链表 约瑟夫问题  如何链表是否成环)

l1 = [12, 21, 32, 43, 56, 76, 87, 98, 123, 321, 453, 565, 678, 754, 812, 987, 1001, 1232]
 查找列表中某个数据值
 方式1:for循环  次数较多
 方式2:二分法 不断的对数据集做二分切割
代码实现二分法
 定义我们想要查找的数据值
 target_num = 987


 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)
    elif target_num < l1[middle_index]:
        # 切片保留列表左边一半
        left_l1 = l1[:middle_index]
        print(left_l1)
        # 针对左边一半的列表继续二分并判断 >>>: 感觉要用递归函数
        return get_middle(left_l1, target_num)
    else:
        print('恭喜你 找到了!!!')
 get_middle(l1, 987)
 get_middle(l1, 2000)
 get_middle(l1, 12)
 
 

三元表达式

简化步骤:代码简单并且只有一行  那么可以直接在冒号后面编写
name=‘jason’
if name == 'jason':print(‘老师’)
else:print('学生')
三元表达式
res='老师'if name == ‘jason’slse‘学生’
print(res)
数据值1 if 条件 else 数据值2 
条件成立则使用数据值1 条件不成立则使用数据值2

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

image.png

各种生成式

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

image.png

  • 字典生成式

image.png

  • 集合生成式

image.png

  • 元组生成式>>>:没有元组生成式 下列的结果是生成器(后面讲)

image.png

匿名函数

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

常见内置函数

 映射  map()
    l1 = [1, 2, 3, 4, 5]
        res = map(lambda x:x+1, l1)
        print(list(res)) [2, 3, 4, 5, 6]
  • 查询最大值使用的是max()函数,查询最小值使用的是min()函数

image.png

* reduce  传多个值 返回一个值    
    reduce()函数会对参数序列中元素进行累积。
    函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 12 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
    Python3.x reduce() 已经被移到 functools 模块里,如果我们要使用,需要引入 functools 模块来调用 reduce() 函数:
    from functools import reduce

image.png