一、把嵌套列表压平为一层列表
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]