首页 >综合 > > 正文

算法、表达式、生成器-世界微速讯

2023-04-25 00:30:03 来源:博客园


(资料图)

1.算法简介及二分法

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]def get_middle(l1, target_num):    middle_index = len(l1) // 2    if len(l1) == "0":        print("很抱歉您要找的数据没有")    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, 1232)

2.三元表达式

原代码:user_pwd = "123"if user_pwd == "123":    print("密码输入正确")else:    print("密码输入错误")    1.代码简单并且只有一行,可以直接在冒号后面编写user_pwd == "123"if user_pwd == "123":print("密码输入正确")else:print("密码输入错误")    2.三元表达式:语法结构:    数据值1 if 条件 else 数据值2条件成立则使用数据值1,条件不成立则使用数据值2user_pwd = "123"res = "密码输入正确" if user_pwd == "123" else "密码输入错误"print(res)"""当结果是二选一的情况下,使用三元表达式较为简洁,并且不推荐多个三元表达式嵌套"""

3.列表生成式

1.要求:name_list = ["jason", "kevin", "oscar", "tony", "jerry"]给列表中所有人名的后面加上_NB的后缀方法1:for 循环name_list = ["jason", "kevin", "oscar", "tony", "jerry"]l1 = []for i in name_list:    new_i = i + "_NB"  # 或new_i = f"{name}_NB"    l1.append(new_i)print(l1)  # ["jason_NB", "kevin_NB", "oscar_NB", "tony_NB", "jerry_NB"]方法2:列表生成式list = ["jerry", "liming", "jenny", "danny", "oscar"]list = [name + "666" for name in list]print(list)  # ["jason_NB", "kevin_NB", "oscar_NB", "tony_NB", "jerry_NB"]"""只适用于字符串,其它数据类型不适用"""2.给列表中指定的元素(字符串)加上指定的后缀name_list = ["jason", "kevin", "oscar", "tony", "jerry"]name_list = [name + "NB" for name in name_list if name == "jason"]print(name_list)  # ["jasonNB"]3.在name !== "jerry"的情况下,如果name == "jason",打印"大佬",其他的打印小赤佬name_list = ["jason", "kevin", "oscar", "tony", "jerry"]new_list = ["大佬" if name == "jason" else "小赤佬" for name in name_list if name != "jerry"]print(new_list)  # ["大佬", "小赤佬", "小赤佬", "小赤佬"]"""列表生成式内的变量使用完会即刻销毁,在生成式外使用会直接报错:a = [b for b in range(3)]print(b)  # 报错"""

4.字典生成式

1.enumerate()中添加数据类型可以进行for循环,打印这两个数据发现是索引值和数据的元素。s = "hello world"for i,j in enumerate(s):    print(i, j)
l = ["jason", "danny", "jenny", "jerry"]for i,j in enumerate(l):    print(i, j)
"""也可以指定起始位数"""s = "hello world"for i,j in enumerate(s, start=16):    print(i, j)
2.也可以放在字典中,构成一个字典d1 = {i: j for i, j in enumerate("unbelievible")}print(d1)  # {0: "u", 1: "n", 2: "b", 3: "e", 4: "l", 5: "i", 6: "e", 7: "v", 8: "i", 9: "b", 10: "l", 11: "e"}
"""也可以指定起始位数"""d1 = {i: j for i, j in enumerate("unbelievible", start=100)}print(d1)

5.集合生成式

集合属性:去重、无序res = {i for i in "hello"}print(res)  # {"l", "h", "o", "e"}

6.匿名函数

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

7.常见的内置函数

1.map() 映射"""map不改原数据类型,而是形成一个新的列表,所以打印的时候要用print(list())"""l1 = [1, 2, 3, 4, 5]res = map(lambda x:x+1, l1)print(list(res))  # [2, 3, 4, 5, 6]或列表生成式也可以达到目的:l1 = [1, 2, 3, 4, 5]l1 = [i + 1 for i in l1]print(l1)  # [2, 3, 4, 5, 6]res = map(lambda x, y: (x - y, x + y), [4, 5, 6], [1, 3, 2])print(list(res))  # [(3, 5), (2, 8), (4, 8)]res = map(lambda x, y: x + y, [1, 2, 3, 4], [4, 8, 2, 4])print(list(res))  # [5, 10, 5, 8]"""map还可以转化数据类型,并返回一个列表"""res = map(int, {1,2,3,4})print(list(res))   # [1, 2, 3, 4]2.max()\min()2.1 求列表l1 = [11, 36, 32, 82, 5, 78, 236, 893, 567]的最大值方法1:用for循环求出列表的最大值:l2 = []l1 = [11, 36, 32, 82, 5, 78, 236, 893, 567]l2.append(l1[0])for i in l1:    if i > l2[0]:        l2.append(i)        del l2[0]print(l2[0])  # 893方法2:用max()l1 = [11, 36, 32, 82, 5, 78, 236, 893, 567]print(max(l1))  # 8932.2 找出薪资最高的人并返回:dict = {    "jason": 100000,    "jerry": 5000,    "oscar": 10000,    "kitty": 20000}方法1: dict = {    "jason": 100000,    "jerry": 5000,    "oscar": 10000,    "kitty": 20000}def index(a):    return dict.get(a)res = max(dict, key=index)  # 传了函数修改了比较的依据,如果不传则会按照字符编码顺序比较print(res)  # jason    方法2:res = max(dict, key=lambda k : dict.get(k))print(res) # jasonfor循环只会遍历字典的键,字典的键是字母开头,只能根据ASCII字符编码的顺序来比较,其中A-Z位数为:65-90,a-z位数为 97-122,2.3如果可迭代对象为空,max()函数应该采用default参数l1 = []print(max(l1,default=-1))  # -13.reduce()函数:python3中需要从模块中调用,python2中可以直接调用。化多为一,lambda定义一个函数,reduce()按照定义的函数计算一个结果from functools import reducel1 = [11, 36, 32, 82, 5, 78, 236, 893, 567]res = reduce(lambda a, b : a * b, l1)print(res)  # 48425057425704960from functools import reducel1 = [11, 36, 32, 82, 5, 78, 236, 893, 567]res = reduce(lambda a, b: a + b, l1)print(res)  # 1940

作业

"""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"]}}def login_auth(mode):    def outer(func):        def inner(*args, **kwargs):            user_name = input("请输入您的用户名>>>:").strip()            user_pwd = input("请输入您的密码>>>:").strip()            if mode == "1":                for data in user_data:  # data: "1", "2", "3"                    name1 = user_data.get(data).get("name")                    pwd1 = user_data.get(data).get("pwd")                    if user_name == name1 and user_pwd == pwd1:                        print("登陆成功")                        res = func(*args, **kwargs)                        return res                else:                    print("登陆失败")            elif mode == "2":                if user_name == user_data.get("1").get("name") and user_pwd ==user_data.get("1").get("pwd") or user_name == user_data.get("2").get("name") and user_pwd ==user_data.get("2").get("pwd"):                    print("登陆成功")                    is_login = True                    res = func(*args, **kwargs)                    return res                elif user_name == user_data.get("3").get("name"):                    print("您无权执行此操作")                else:                    print("用户名或密码错误")            elif mode == "3":                if user_name == "jason" and user_pwd == "123":                    print("登陆成功")                    is_login = True                    res = func(*args, **kwargs)                    return res                elif user_name == user_data.get("2").get("name") or user_name == user_data.get("3").get("name"):                    print("您无权执行此操作")                else:                    print("登陆失败")        return inner    return outer@login_auth("1")def func1():    print("from func1")@login_auth("2")def func2():    print("from func2")@login_auth("3")def func3():    print("from func3")func_dict = {"1":func1,             "2":func2,             "3":func3,             }while True:    print("1"          "2"          "3")    choice = input("请输入想要执行的编号")    func_dict.get(choice)()

标签:

x 广告
x 广告

Copyright ©  2015-2022 每日河北网版权所有  备案号:京ICP备12018864号-37   联系邮箱:291 323 6@qq.com