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啦,在线秒回ヾ(◍°∇°◍)ノ゙

你可能感兴趣的:(Python学习,递归,嵌套列表,斐波那契,Python,循环)