首页 > 其他 > 详细

二分法

时间:2019-07-13 09:38:00      阅读:29      评论:0      收藏:0      [点我收藏+]

标签:close   ddl   tool   {}   nan   不能   for循环   内部   从大到小   

一、二分法

 二分法:容器类型里面的数字必须有大小顺序,然后查找元素的时候一分为二,以中间为界看元素在哪边,多次二分后即可找到,提升效率
野生二分法:取名不能见名知意!!!
#在列表中找某个元素
技术分享图片

 


 

技术分享图片
#在列表中找某个元素
l = [1,3,5,12,57,89,101,123,146,167,179,189,345]
def get_num(l,target_num):
    if not l:
        print(你给的工资 这个任务怕是没法做)
        return
    # 获取列表中间的索引
    print(l)
    middle_index = len(l) // 2
    # 判断target_num跟middle_index对应的数字的大小
    if target_num > l[middle_index]:
        # 切取列表右半部分
        num_right = l[middle_index + 1:]
        # 再递归调用get_num函数
        get_num(num_right,target_num)
    elif target_num < l[middle_index]:
        # 切取列表左半部分
        num_left = l[0:middle_index]
        # 再递归调用get_num函数
        get_num(num_left, target_num)
    else:
        print(find it,target_num)

get_num(l,189)
二分法标准写法

二、表达式

1.三元表达式

三元表达式固定表达式
    值1 if 条件 else 值2
        条件成立返回 值1
        条件不成立返回 值2

x = 100
y = 200
res = x if x > y else y   # x | if x>y else|  y 三部分 ,中间成立返回x,不成立返回y
print(res) #200

2.列表生成式

快速生成
技术分享图片

 


技术分享图片
test = [abc,bcd,cde,ddd]
res = [%s_xx%name for name in test]
print(res)  #[‘abc_xx‘, ‘bcd_xx‘, ‘cde_xx‘, ‘ddd_xx‘]

test1 = [abc_xx, bcd_xx, cde_xx, ddd_xx,eee]
res = [name  for name in test1 if name.endswith(xx)]
print(res)  #[‘abc_xx‘, ‘bcd_xx‘, ‘cde_xx‘, ‘ddd_xx‘]
列表生成式

3.字典生成式

#常规
goods_list = [‘apple‘,‘banana‘,‘cucumber‘,‘pear‘]
price_list = [10,20,30,40]
goods_dict = {}
for index,price in enumerate(price_list):  #枚举 输出索引和元素
   goods_dict[goods_list[index]] = price
print(goods_dict)
#生成式
goods_list = [‘apple‘,‘banana‘,‘cucumber‘,‘pear‘]
goods_dict = {index:good for index,good in enumerate(goods_list)}
print(goods_dict)  #{0: ‘apple‘, 1: ‘banana‘, 2: ‘cucumber‘, 3: ‘pear‘}

goods_list = [‘apple‘,‘banana‘,‘cucumber‘,‘pear‘]
goods_dict = {index:good for index,good in enumerate(goods_list) if good == ‘cucumber‘}
print(goods_dict)  #{ 2: ‘cucumber‘}

4.元组、集合

#集合生成式
res = {i for i in range(10) if i != 4}
print(res)  #{0, 1, 2, 3, 5, 6, 7, 8, 9}

#元祖比较特殊,生成老母猪
res1 = (i for i in range(10) if i != 4)  # 这样写不是元组生成式 而是生成器表达式(老母猪)
print(res1)  #<generator object <genexpr> at 0x0000000001E00EB8>

三、匿名函数

1.匿名函数的特点:
    临时存在用完就没了,通常不会单独使用,是配合内置函数一起使用
2.形式:
(lambda x,y:x+y)(a,b)  #相当于(函数名)(加括号并传参)
     :左边x,y的相当于函数的形参
     :右边x+y的相当于函数的返回值
     a,b 相当于实参
     
def my_sum(x,y):
    return x + y
print(my_sum(1,5))  #6

res = (lambda x,y:x+y)(5,1)
print(res)  #6

四、常用内置方法

4.1 max(*args,key=func)  min()

1.字母大小比较
 print(chr(97))  #查询编码表中相应编号对应字符
 A-Z  65 90
 a-z  97 122    #中间断开为特殊字符

2.max(*args, key=None)  函数内部可以传入可调用对象和一个函数,函数不写默认比较前面的东西,写了key=func,则比较函数func的内部返回值
 l = [1,2,3,4,5]
 print(max(l))  # 内部是基于for循环的

d = {
    ‘egon‘:30000,
    ‘jason‘:88888888888,
    ‘nick‘:3000,
    ‘tank‘:1000
}
 print(max(d))  #tank  没有传入函数则比较字典的key的首字母

#使用函数 def index(name): return d[name] print(max(d, key=index)) #jason 传入index函数,则比较函数内部返回值 #使用匿名函数 print(max(d,key=lambda name:d[name]))

4.2 map 映射  基于for循环

k = [1,2,3,4,5,6]
print(list(map(lambda x:x+2,k)))  #[3, 4, 5, 6, 7, 8]  
#基于for循环 ,从k中每次取出一个元素x,执行x+2
# map(lambda x:x+2,k) 是一个老母猪 ,加上list转化为列表

4.3 zip  拉链 基于for循环

l1 = [1,2]
l2 = [jason,egon,tank]
l3 = [a,b,c]
print(list(zip(l1,l2)))  #[(1, ‘jason‘), (2, ‘egon‘)]
print(zip(l1,l2,l3)) #<zip object at 0x00000000027CE708> 老母猪
print(list(zip(l1,l2,l3)))  #[(1, ‘jason‘, ‘a‘), (2, ‘egon‘, ‘b‘)]

4.4 filter 基于for循环

k = [1,2,3,4,5,6]
print(list(filter(lambda x:x != 3,k)))  # [1, 2, 4, 5, 6]
#基于for循环,依次从k中取出元素,如果:后面条件成立返回结果,不成立跳过

4.5  sorted  排序

k = [jason,egon,nick,tank]
print(sorted(k))  #[‘egon‘, ‘jason‘, ‘nick‘, ‘tank‘]  从小到大
print(sorted(k,reverse=True))  #[‘egon‘, ‘jason‘, ‘nick‘, ‘tank‘] 从大到小

4.6 reduce 

rom functools import reduce  #调用模块
k = [1,2,3,4,5,6]
print(reduce(lambda x,y:x+y,k))  # 21 没有初始值时第一次先拿出来两个元素相加,之后每次拿出一个与之前相加的结果再相加
print(reduce(lambda x,y:x+y,k,10))  # 31   传入参数10初始值  第一个参数

 

二分法

标签:close   ddl   tool   {}   nan   不能   for循环   内部   从大到小   

原文:https://www.cnblogs.com/xp1315458571/p/11178930.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!