Python递归实现①把嵌套列表压平为一层列表②返回嵌套列表中某元素出现的个数③返回第n个斐波那契数

一、把嵌套列表压平为一层列表

def flatten(nested_list):
    '''
    这是把嵌套列表压平为简单列表并返回的函数

    :参数 nested_list:一个嵌套列表
    '''
    #先定义一个空列表,用于存储我们提出出来的元素,
    # 这也是最终要返回的那个列表
    new_list = []
    #遍历原始的嵌套列表
    for element in nested_list:
        #如果当前元素是一个列表
        if type(element) is list:
            #调用flatten函数本身,就把它返回的结果先想象成一个已经整理好的一层列表
            #然后拼接到我们最终要返回的列表上
            new_list+=flatten(element)
        #如果当前元素不是列表,那正是我们要提取出来的元素
        #把它装进列表,拼接到我们最终要返回的列表上
        else:
            new_list+=[element]
    
    #返回我们整理好的新列表
    return new_list

二、返回某个元素在一个嵌套列表中出现的次数

def count(target,nested_list):
    '''
    返回嵌套列表中某元素出现的次数的函数

    :参数 target:我们想查看的目标元素
    :参数 nested_list:一个嵌套列表
    '''
    #初始化计数器
    number = 0 
    #遍历给定的嵌套列表
    for element in nested_list:
        #如果当前元素是一个列表
        if type(element) is list:
            #调用count函数本身,就想先成它已经数好了这个子列表中有多少个目标元素了
            #把它的返回值(必定是一个整数)加到我们的计数器上
            number += count(target,element)
        #如果当前元素不是列表,那就是一个普通的元素
        else:
            #把这个普通的元素和我们的目标元素相比较,得出布尔值
            #这里是一个小窍门,布尔值可以直接当做数字1或者0参与加法运算
            number += (target == element)
    #返回技术结果
    return number

三、返回斐波那契数列中的第n个数

def fib(n):
    '''
    返回斐波那契数列中的第n个元素

    :参数 n:数列中元素的序号,注意,需要从0开始
    '''
    #开头的两个元素单独处理
    if n<=1:
        return n
    #斐波那契数列的特点就是一个元素等于它前面两个元素之和
    t = fib(n-1)+fib(n-2)
    return t 

PS:上面这个生成斐波那契数的递归函数实在是太——慢——啦——  还不如下面循环的方式快:

def fib(n):
    '''
    返回斐波那契数列中的第n个元素

    :参数 n:数列中元素的序号,注意,需要从0开始
    '''
    #这是一个存放斐波那契数列的列表,前两个元素先手动填充了
    fib_list = [0,1]
    #当n小于1的时候,就把n当做索引,取出列表中相应的元素即可
    if n <= 1:
        return fib_list[n]
    #n大于1的时候
    else:
        #循环n-1次
        for i in range(n-1):
            #每次都把数列中的最后两个元素拿出来相加,就得到一个新元素
            #新元素一定要记得追加到列表的末尾,这样这个数列就会越来越长
            fib_list.append(fib_list[-1]+fib_list[-2])
        #而我们要的元素,就是数列中最后(新)的那一个
        return fib_list[-1] 

 

如果这篇博文帮到了你,就请给我点个吧(#^.^#)

有疑问也欢迎留言~博主可nice啦,在线秒回ヾ(◍°∇°◍)ノ゙

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值