首页 > 其他分享 >代码简化方式

代码简化方式

时间:2022-10-13 20:56:26浏览次数:41  
标签:name 方式 res 代码 list middle 简化 l1 print

今日内容总结

算法简介

1.什么是算法
	算法就是解决问题的有效方法 不是所有的算法都很高效也有不合格的算法
2.算法应用场景
	推荐算法(抖音视频推送 淘宝商品推送)
	成像算法(AI相关)......
	几乎涵盖了我们日常生活中的方方面面

img

二分法

二分法就是通过每次取中间位置与目标比较,每次可以缩小一半寻找范围的寻找方法

"""
二分法使用要求
	待查找的我数据集必须有序
二分法的缺陷
	针对开头结尾的数据 查找效率很低
"""
l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99, 200, 333, 555, 777, 999, 3333, 11111, 22222]
# 查找列表中某个数据值
# 方式1:for循环 次数较多
# 方式2:二分法 不断的对数据集做二分切割
"""代码实现二分法"""
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, 44)
get_middle(l1, 3333)

生成式/表达式/推导式

三元表达式

语法格式为:数据值1 if 条件 else 数据值2

简化步骤1:代码简单并且只有一行 那么可以直接在冒号后面编写
name = 'qyf'
if name == 'qyf':print('大哥')
else:print('弟弟')
"""三元表达式"""
res = '大哥' if name == 'qyf' else '弟弟'
print(res)  # 大哥
"""
条件成立则使用数据值1 条件不成立则使用数据值2
当结果是二选一的情况下 使用三元表达式较为简便
并且不推荐多个三元表达式嵌套
"""

列表生成式

name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
给列表中所有人名的后面加上_NB的后缀
for循环
new_list = []
for name in name_list:
    data = f'{name}_NB'
    new_list.append(data)
print(new_list)
列表生成式
先看for循环 每次for循环之后再看for关键字前面的操作
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)  # ['jason_NB']
new_list = ['大佬' if name == 'jason' else '小赤佬' for name in name_list if name != 'jerry']
print(new_list)  # ['大佬', '小赤佬', '小赤佬', '小赤佬']

字典生成式

enumerate(iteration, start)函数默认包含两个参数,其中iteration参数为需要遍历的参数,比如字典、列表、元组等,start参数为开始的参数,默认为0(不写start那就是从0开始)。enumerate函数有两个返回值,第一个返回值为从start参数开始的数,第二个参数为iteration参数中的值。

s1 = 'hello world'
for i,j in enumerate(s1, start=100):
    print(i,j)
# 100 h
# 101 e
# 102 l
# 103 l
# 104 o
# 105  
# 106 w
# 107 o
# 108 r
# 109 l
# 110 d
d1 = {i:j for i, j in enumerate(s1)}
print(d1)  # {0: 'h', 1: 'e', 2: 'l', 3: 'l', 4: 'o', 5: ' ', 6: 'w', 7: 'o', 8: 'r', 9: 'l', 10: 'd'}

集合生成式

res = {i + 'lowb' for i in 'hello'}
print(res)  # {'olowb', 'elowb', 'llowb', 'hlowb'}

元组生成式

元组生成式>>>:没有元组生成式 下列的结果是生成器(后面讲)
res = (i+'SB' for i in 'hello')
print(res)  # <generator object <genexpr> at 0x0000020FEDA6AD60>
for i in res:
    print(i)
# hSB
# eSB
# lSB
# lSB
# oSB

匿名函数

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

常见内置函数

1.map()	映射
l1 = [1, 2, 3, 4, 5]
# def func(a):
#     return a + 1
res = map(lambda x: x + 1, l1)
print(list(res))  # [2, 3, 4, 5, 6]


2.max()\min()
l1 = [11, 22, 33, 44]
res = max(l1)
print(res)  # 44
d1 = {
    'zja': 100,
    'zjson': 8888,
    'berk': 99999999,
    'oscar': 1
}
print(max(d1))  # zjson  只有键参与   65~90为A~Z  97~122为a~z

def func(a):
    return d1.get(a)
res = max(d1, key=lambda k: d1.get(k))
print(res)  # berk

res = max(d1, key=func)
print(res)  # berk 调用函数func按键取值  值比大小后返回最大值所对应的键

3.reduce
reduce  传多个值 返回一个值
from functools import reduce
l1 = [11, 22, 33, 44, 55, 66, 77, 88]
res = reduce(lambda a, b: a + b, l1)  # 11+22=33 33+33=66 66+44=110....
print(res) # 396

标签:name,方式,res,代码,list,middle,简化,l1,print
From: https://www.cnblogs.com/qian-yf/p/16788949.html

相关文章

  • 4.错误代码C1083
    有的时候在VS中遇到的errorC1083:无法打开**:“*.*”:Nosuchfileordirectory的错误,这里总结了我遇到过的情况:错误 C1083 无法打开包括文件:“MyArray.h”:No......
  • iPad也能写代码,Lightly今日正式上架 iPad AppStore
    “叮!您的需求现已完成评估和开发,Lightly现已正式推出iPad版本!”现在就到苹果AppStore上搜索「Lightly」,在iPad上体验轻量且功能强大的集成开发工具。Lightly是由TeamCode出......
  • VLQ & Base64 VLQ 编码方式的原理及代码实现
    目录VLQBase64VLQVLQVLQ(Variable-lengthquantity)是一种通用的,使用任意位数的二进制来表示一个任意大的数字的一种编码方式。编码实现:**对数字137进行VLQ**编码,以......
  • android开发使用git-tortoisesvn合并代码处理冲突的使用记录
    android开发使用git-tortoisesvn合并代码处理冲突的使用记录工具Androidstudio,Git,tortoisesvn作为Android开发的,androidstudio离不开,使用git管理项目也是离不开的,......
  • http请求方式-OkHttpClient
    http请求方式-OkHttpClientimportcom.example.core.mydemo.http.OrderReqVO;importokhttp3.*;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importor......
  • http请求方式-RestTemplate
    http请求方式-RestTemplateimportcom.alibaba.fastjson.JSON;importcom.example.core.mydemo.http.OrderReqVO;importorg.springframework.http.HttpEntity;import......
  • http请求方式-CloseableHttpClient
    http请求方式-CloseableHttpClientimportcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONObject;importcom.example.core.mydemo.http.OrderReqVO;imp......
  • http请求方式-HttpClient
    http请求方式-HttpClientimportcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONObject;importcom.example.core.mydemo.http.OrderReqVO;importorg.a......
  • http请求方式-HttpURLConnection
    http请求方式-HttpURLConnectionimportcom.alibaba.fastjson.JSON;importcom.example.core.mydemo.http.OrderReqVO;importorg.springframework.lang.Nullable;im......
  • 7.2 2叉树广度优先经典代码(C#)
     2叉树publicclassTreeNode{publicintval;publicTreeNodeleft;publicTreeNoderight;publicTreeNode(intx){val=x;......