首页 > 编程语言 >算法和常见内置函数

算法和常见内置函数

时间:2022-10-13 22:14:42浏览次数:35  
标签:内置 函数 get 算法 result l1 print target name

算法和常见内置函数

算法简介及二分法

什么是算法

1.算法

​ 算法就是解决问题的有效方法,不是所有的算法嗾很高效也有不合格的算法

2.算法应用场景

​ 推荐算法:(抖音视频推送、淘宝商品推送,行业称为投喂)

​ 成像算法(AI)

​ 几乎涵盖了我们日常生活中的方方面面

3.算法工程师要求

​ 待遇非常好,但是要求也非常高

4.算法部分

​ 不是所有的互联网公司都养的起算法部分,只有大型互联网公司才有

​ 算法部分类似于药品研发部分

二分法

1.二分法是算法中最简单的算法,甚至不称为算法

二分法使用要求:
	待查找的数据集必须有序
二分法的缺陷
	针对开头结尾的数据,查找效率很低
常见算法的原理以及代码
	二分法、冒泡、快拍、插入、堆排、桶排、数据结构(链表、约瑟夫问题、如何链表是否成环         
	
l1 = [11,34,45,67,89,90,98,123,167,198,235,267,298,376,475,567,789,892,942,1234,1688,12345]
"""
查找列表中的某个数据值
方式一
    for 循环  次数比较多
方式二
    二分法  不断的对数据集做二分切割
"""

# for 循环  查找列表中的567
# a = 567
# for i in l1:
#     if i == a :
#         print(i)
#         break


""" 推理过程"""

#1.定义我们想要查找的数据值
# target_num = 567
def get_middle(l1,target_num):
    middle_index =len(l1)//2
    if target_num >l1[middle_index]:
        get_target_num = l1[middle_index+1:]
        print(get_target_num)

        middle_index1 = len(get_target_num)//2
        if target_num>get_target_num[middle_index1]:
            get_target_num1 = get_target_num[middle_index1+1:]
            print(get_target_num1)
        elif target_num<get_target_num[middle_index1]:
            b = get_target_num[:middle_index1]
            print(b)
        else:
            print('恭喜找到')

    elif target_num < l1[middle_index]:
        target_num1 = l1[:middle_index]
        print(target_num1)

    else:
        print('恭喜找到567')

get_middle(l1,567)


""" 二分法实现查找数据"""

def get_middle(l1,target_num):
    middle_index =len(l1)//2
    if target_num >l1[middle_index]:
        get_target_num = l1[middle_index+1:]
        print(get_target_num)
        # 针对右边一半的列表继续二分法并判断>>>:要用递归函数
        return get_middle(get_target_num,target_num)


    elif target_num < l1[middle_index]:
        target_num1 = l1[:middle_index]
        print(target_num1)
        return get_middle(target_num1,target_num)
    else:
        print('恭喜找到')

# get_middle(l1,567)
# get_middle(l1,1234)
get_middle(l1,67)
""" 结果显示如下:
[11, 34, 45, 67, 89, 90, 98, 123, 167, 198, 235]
[11, 34, 45, 67, 89]
[67, 89]
[67]
恭喜找到
"""

三元表达式(三元运算式)

三元运算式的结构

结构:
	数据值1 if 条件 else 数据值2

如何判断结果:
	条件成立则使用数据1,条件不成立则使用数据值2
	当结果是二选一的情况下,使用三元表达式较为简便
	并且不推荐多个三元表达式嵌套

代码的实现:

# 简化步骤:代码简单并且只有一行,那么可以直接在冒号后面编写
name = 'kiki'
if name =='kiki':print('老师')
else:print('学生')

# 三元表达式
result = '老师' if name =='kiki' else '学生'
print(result)

各种生成式/表达式/推导式

列表生成式

# 简化步骤:代码简单并且只有一行,那么可以直接在冒号后面编写
# name = 'kiki'
# if name =='kiki':print('老师')
# else:print('学生')

# 三元表达式
# result = '老师' if name =='kiki' else '学生'
# print(result)


"""  表达式的推导式"""
name_list = ['kiki','nana','kevin','kimi','jenny','tony']
# 1.给列表中所有人名加入_welcome
"""  方式一  for 循环 """
new_list = []
for name in name_list:
    # data = name + '_welcome'
    # new_list.append(data)
    data = f'{name}_welcome'
    new_list.append(data)
print(new_list)  # ['kiki_welcome', 'nana_welcome', 'kevin_welcome', 'kimi_welcome', 'jenny_welcome', 'tony_welcome']

""" 方式二 列表生成式 
    先看for循环 每次循环之后再看for 关键字前面的操作   """
new_list1 = [name1 + '_good' for name1 in name_list]
print(new_list1)  # ['kiki_good', 'nana_good', 'kevin_good', 'kimi_good', 'jenny_good', 'tony_good']
"""  如何发生:
        第一步先看for循环出第一name1 'kiki' ,再去加上‘_good’ 然后放在列表中等着
        第二步接着for循环出第二个name1 'name',再去加上‘_good',尾部添加
        .........
        """
# 复杂情况  步骤 for>>>>if >>>>name2+'_pretty
new_list2 = [name2 + '_pretty' for name2 in name_list if name2 == 'kimi']
print(new_list2)  # 'kimi_pretty']

new_list3 = ['teacher' if name2 == 'kiki' else 'student' for name2 in name_list if name2 != 'kimi']
print(new_list3)  # ['teacher', 'student', 'student', 'student', 'student']

字典生成式

结构:
dict1 ={i:j for i,j in enumerate('happy') }

​ 代码的实现:

""" 字典生成式 """
l1 = 'hello world'
for i,k in enumerate(l1):
    print((i, k),end='')  # (0, 'h')(1, 'e')(2, 'l')(3, 'l')(4, 'o')(5, ' ')(6, 'w')(7, 'o')(8, 'r')(9, 'l')(10, 'd')


for a,b in enumerate(l1,start=100):
    print(a,b)  # 101 e  102 l.......
    
    
dict1 = {i:j for i,j in enumerate('happy')}
print(dict1)  # {0: 'h', 1: 'a', 2: 'p', 3: 'p', 4: 'y'}

集合生成式

"""  集合生成式  """
result = {i for i in 'hello'}
print(result)  # {'o', 'e', 'h', 'l'}

元组生成式 >>>>无,下面是生成器

""" 元组生成式  """
result = (i + 'day' for i in 'people')
print(result)  # <generator object <genexpr> at 0x0000026237C3BA50>
for j in result:
    print(j,end='、')  # pday、eday、oday、pday、lday、eday

匿名函数

1.概念
	没有名字的函数  需要使用关键字lambda
2.语法结构
	lambda  形参:返回值
3.使用场景
	lambda a,b:a+b
	注意:匿名函数一般不单独使用 ,需要配合其他函数一起用
	
	
4.代码实现
def my_add(a,b):
    return a+b
result = my_add(1,2)
print(result)  # 3


result1 = lambda a,b:a+b  # 不能单独使用,需要一个变量来接收
print(result1)  # <function <lambda> at 0x00000184AC2C61F0>
result2= result1(1,2)
print(result2)  # 3

image

常见内置函数

1.map() 映射
	map函数也是python中的一个内置函数,map在这里的意思是映射的意思,会根据提供的函数对指定序列做映射。map函数会返回一个迭代器,如果要转换为列表,可以使用 list() 来转换
	map(function,iterable),  function>>>: 函数  ,iterable>>>: 可遍历对象
	
    l1 = [11,22,33,44,55]
    #def function(a):
    #    return a + 1
    result = map(lambda x :x+1,l1)
    print(list(result))   # [12, 23, 34, 45, 56]
    # print(dict(result))  # {}
    # print(tuple(result))  # ()
    """ 一般用列表来接收"""

2.max()\min()

eg1:
    l1 = [11, 21, 2, 3, 2, 1, 2, 3, 2, 3, 2, 3, 2324, 242, 432, 43246, 456, 46, 345, 55345]
    result = max(l1)
    print(result)  # 55345

eg2:
    d1 = {
        'kiki': 999,
        'kimi': 1234,
        'jenny': 3456,
        'rose': 888
    }
    方式-:
    def function(a):
        return d1.get(a)
    res = max(d1,key=function)
    print(res)  # jenny
    
    方式二:
    res = max(d1,key=lambda k:d1.get(k))
    print(res)  # jenny
    
	"""
        A-Z: 65-90
        a-z:97-122
                        """


3.reduce
   """ reduce  传多个值  返回一个值 """
    from functools import reduce
    l1 = [11, 22, 33, 44, 55, 66]
    result = reduce(lambda a,b:a*b,l1)
    print(result)  # 1275523920
    
    """步骤:
    1.导入 reduce
    2.获取列表
    3.获得a=11,b=22 并相乘得242,再赋值给a
    4,a=242,或者b=33,a,b相乘得7986再赋值给a
    依次循环,直至结束"""

作业

1.附加题
  有下列用户数据
    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']}
    }
    并有三个函数
        def func1():
            pass
        def func2():
            pass
        def func3():
            pass
    要求:调用上述三个函数的时候需要从user_data中校验用户身份是否正确
    并获取当前登录用户拥有的可执行函数功能编号即键access对应的功能编号列表
    func1是1、func2是2、func3是3
    并且一旦用户登录成功之后后续函数的调用不再校验用户身份
    请思考如何获取函数功能编号 如何校验用户身份 如何校验权限
    ps:装饰器知识         附赠:实现上述主体功能即可 其他扩展优化功能可暂且不写
            
            
'''
1.先编写校验用户身份的装饰器
2.然后再考虑如何保存用户登录状态
3.再完善各种需求
'''
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']}
}

标签:内置,函数,get,算法,result,l1,print,target,name
From: https://www.cnblogs.com/zhanglanhua/p/16789907.html

相关文章

  • new 和 make 函数区别
    详细参见go文件夹下src/builtin/builtin.go文件。 new函数定义:funcnew(Type)*Type说明:形参是一个数据类型,返回值是这个数据类型(零值)的的指针。用途:初始化,作用......
  • 三元表达式以及内置函数
    算法简介及二分法三元表达式各种生成式匿名函数重要内置函数常见内置函数今日内容详细算法简介及二分法1.什么是算法 算法就是解决问题的有效方法不是所有的算......
  • 二分法及常见内置函数(部分)
    昨日内容回顾多层语法糖的顺序语法糖多层使用时,从被装饰的函数开始由下而上读取,由上而下执行。有参装饰器有参装饰器可以为装饰器提供额外的参数。defwrapper(pa......
  • python算法简介与各种生成式
    今日内容概要算法简介及二分法三元表达式各种生成式匿名函数重要内置函数常见内置函数今日内容详细算法简介及二分法1.什么是算法 算法就是解决问题的有校......
  • python函数及算法
    算法二分法二分算法图什么是算法?​ 算法是高效解决问题的办法。需求:有一个按照从小到大顺序排列的数字列表,查找某一个数字#定义一个无序的列表nums=[3,4,5,67,......
  • 计算空间物体包围球的两种算法实现
    详细介绍了计算空间包围球的两种算法。1.概述在进行二维空间几何运算的之前,往往会用包围盒进行快速碰撞检测,从而筛掉一些无法碰撞到的可能。而在三......
  • 基础的函数
    #include<stdio.h>#include<math.h>intmain(){ doublex,y,a,b,c,d,e; printf("请分别输入x,Y的值:"); scanf_s("%lf%lf",&x,&y); a=sin(x); b=cos(x......
  • JavaScript高级程序设计笔记10 函数Function
    函数1.几种实例化函数对象的方式以函数声明的方式定义函数表达式箭头函数(arrowfunction)使用Function构造函数接收任意多个字符串参数,最后一个参数始终会被......
  • 【pytest官方文档】解读- 插件开发之hooks 函数(钩子)
    上一节讲到如何安装和使用第三方插件,用法很简单。接下来解读下如何自己开发pytest插件。但是,由于一个插件包含一个或多个钩子函数开发而来,所以在具体开发插件之前还需要先......
  • 匿名函数,二分法,三元表达示
    算法简介及二分法1.什么是算法 算法就是解决问题的有效方法不是所有算法都很高效也有不合格的算法2.算法应用场景 推荐算法:比如抖音成像算法:AI相关几乎覆......