python--常用简易算法(一)

递归算法

1.有明确的终点,2.有公共数(eg:2^7,(2+n-1)3),3.给出终止递归时的算法。

简单的来说把复杂有累赘的糅合成一个简单算法。

逐级累加的递归

第一个数字为1,求第五个数字等于多少,逐层+2

图解部分

  代码演示

def func(a,n,b):
    res=a+(n-1)*b
    print(res)
    return
func(1,5,2)

列表递归

res = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,[14,]]]]]]]]]]]]]]

打印出这个列表内的所有数字

#方法一,传统做法,循环每个元素,打印数字,遇到数字直接打印,如果是列表,则循环该列表,
#获取列表中的每个元素
def get_num(l):
    for i in l :
        if type(i) is int:
            print(i)
        else:
            get_num(i)
get_num(l)

算法之二分法

什么二分法

不断切分成二分之一,不断靠近目标值,其余舍弃

eg:a = [11, 23, 43, 57, 68, 76, 81, 99, 123, 321, 432, 567, 666, 712, 899, 999, 1111]取这一串列表中的数字123

做法解释:将列表a平均切割成2部分,分为左右两部分,取接近123的那一部分,然后在切割一半,循此往复,取出目标值

要求:数据集必须有序

 代码实例

a = [11, 23, 43, 57, 68, 76, 81, 99, 123, 321, 432, 567, 666, 712, 899, 999, 1111]
# 方法一:依次循环a内的每一个元素,找出目标值123
count=1
while True:
    count += 1
    for i in a:
        if i == 123:
            print(i)
    break


# 二分法的应用
def test_two(target_num,a):
    # 取a的个数的1/2
    middle=len(a)//2#考虑到列表中有奇数的长度,所以选择取整
    #判断中间索引对应的值比目标值大还是小
    if target_num>a[middle]:
        a_right=a[middle+1:]
        print(a_right)
        test_two(target_num, a_right)
    elif target_num<a[middle]:
        a_left=a[:middle]
        print(a_left)
        test_two(target_num,a_left)
    else:
        print('bing',target_num)
test_two(123,a)

三元表达式

作用:当功能需求只需二选一当情况下,推荐使用三元表达式

'''条件成立采用if前面的值,不成立采用else后面的值,不建议嵌套使用'''
res='达成1个小目标'if 19>8 else('继续努力,你会达成的')

列表生成式:

作用:类似于添加功能,将两个列表整合成一个列表

#通过条件判断之后的变量名for变量名in可迭代对象if条件
name_list=['小米','苹果','华为',‘联想’]
leave=['屌丝','懒癌','国产党','要加油啦']
res=[a+b for a in name_list for b in leave]
print(res)
# 方法二res=[a+b for a in name_list for b in leave]
# print(res)
#方法三
for i in range(len(name_list)):
    res.append((name_list[i],leave[i]))
print(res)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值