递归、匿名函数及列表、字典生成式

技术递归、匿名函数及列表、字典生成式 递归、匿名函数及列表、字典生成式递归、匿名函数及列表、字典生成式1、递归函数
# 1、递归函数
# 递归函数就是函数在执行的时候直接或间接的调用函数本身的函数
''

递归、匿名函数和列表、字典生成公式

递归、匿名函数及列表、字典生成式

1、递归函数

# 1,递归函数

#递归函数是在函数执行时直接或间接调用函数本身的函数。

''递归函数遵循以下两个原则

1.递归:一步一步推导出结论,每次距离想要的结果越近,就越不复杂。

2.回到:逐步返回推导得到的结果,直到得到需要的结果。

递归必须有一个结束条件。

'''

#练习1

#五个同学,第一个比第二个大2岁,第二个比第三个大2岁,以此类推。第五个同学20岁。询问第一个同学的年龄。

#首先定义一个函数。

# def get_age(n):

# #首先定义第五个同学20岁。

#如果n==5:

#返回20

# #从第一名开始,每个同学都比其他同学大两岁。

#返回get_age(n 1) 2

#

# res=get_age(1)

#打印(分辨率)

#练习2

#以相反的顺序打印列表中的每个元素。

list=[1,2,3,4,5,6]

计数=5

国防指数(a):

如果a 0:

返回

打印(列表[a])

a -=1

指数(a)

索引(计数)

#练习3计算年龄1

#年龄1=年龄2 1

#年龄2=年龄3 2

# 3岁=4岁3

# 4岁=5岁4

# 5岁=20岁

#寻找年龄1

def get_age(n,a):

如果n==5:

返回20

a=1

返回get_age(n 1,a) a

res=get_age(1,0)

打印(分辨率)

#练习4打印出以下列表中的每个值,形成一个新列表。

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

# #为接收元素定义一个空列表。

new_list=[]

#定义一个函数来打印列表中的每个元素。

def get_element(列表):

#首先遍历列表中的每个值。

对于列表:中的行

#确定元素的数据类型

如果类型(行)是int:

new_list.append(行)

else:

get_element(行)

返回新列表

res=get_element(l)

打印(分辨率)

#练习5生成斐波那契数列

#定义一个函数来生成斐波那契数列。

def feibo _齐纳(北):

如果n=1:

返回n

else:

返回(费博_齐纳(n-1)费博_齐纳(n-2))

#定义一个空列表来接受斐波那契数列。

feibo_list=[]

#获取用户想要生成的系列数量。

Numbers=input('输入要生成的系列数:')。strip() #删除用户输入的第一个和最后一个特殊字符。

#将用户输入转换为整数

数字=整数(数字)

#判断用户输入

如果号码是0:

#如果用户输入的值小于0,提示用户重新输入。

打印(“请输入正数”)

else:

#如果输入正数,请打印标题。

打印('斐波那契数列',end=' ')

#使用for循环获取斐波那契函数生成的数据

对于范围(数字):中的I

费博_list.append(费博_齐纳(I))

打印(feibo_list)

2、算法之二分法

#算法

#所谓算法是解决问题的有效方法。

“二分法”

二分法的使用

当我们在庞大的数据中找到我们想要的数据值时,我们使用二分法将整个数据分成两部分。

将左边的最大值与我们要找的值进行比较。如果大于我们要找的值,就把左边的部分分成两部分,以此类推。

二分法的前提是要搜索的数据源必须是有序的。

'''

#练习,用二分法从列表中找到我们想要的值。

digit_list=[12,23,34,45,56,67,78,89,90,123,234,345,567,789,899]

#从上面的列表中找到234

#首先定义一个函数,这样我们就可以找到我们想要的值。

def find_digit(l,n):

#首先确定列表是否为空。

如果

len(l) == 0:
print('列表为空')
return
middle_index = len(l)//2
if n l[middle_index]:
right_list = list(l[middle_index+1:])
print(right_list)
return find_digit(right_list,n)
elif n l[middle_index]:
left_list = list(l[:middle_index])
print(left_list)
return find_digit(left_list,n)
else:
print('找到了')
return n
res = find_digit(digit_list,234)
print(res)

3、三元表达式

# 三元表达式
# 所谓的三元表达式就是当结果是二选一的情况时,利用三元表达式可以大大减少代码量
# 语法结构
'''
if 条件成立时的结果 if 条件 else if条件不成立时返回的结果
'''
res = '欢迎光临' if int(input('请输入你的选择:')) == 1 else '欢迎下次再来'
print(res)
'''
三元表达式一般尽量不要嵌套,会让代码看起来很难理解
'''
print('欢迎光临') if int(input(':')) == 1 else print('下次再来哦')

4、列表、字典生成式

# 列表生成式
# 列表生成式是为了快速生成一个新的列表
name_list = ['jason', 'jenny', 'john', 'tony', 'tom']
# 现要求在列表里的每个元素后面加上'_nb',但是列表内元素顺序不变,且元素用列表存储
# 方法一:
# 建立一个空列表,把修改后的元素添加到空列表里
new_list = []
# for循环取列表的每一个索引
for i in range(len(name_list)):
    # 把修改后的元素添加到列表里
    new_list.append('%s_nb' % name_list[i])
# 打印列表
print(new_list)
# 方法二:
# 列表生成式
# 语法结构
'''
变量名 = [i,for i in 列表名 if 条件]
列表生成式的先后执行顺序是:
先循环从列表里取出一个元素,然后再根据if后面的条件判断,把取出的元素拿出来,
循环执行上面的步骤,直到把列表里的所有元素取完为止,然后把拿出来的元素用中括号括起来
!切记,列表生成式里不能加else判断语句,因为有for+else和if+else两种,解释器会混淆,所以,不能加else条件
'''
name_list = ['jason', 'jenny', 'john', 'tony', 'tom']
n = [f'{i}_nb' for i in name_list if i != 'jason']
print(n)
# 字典生成式
# 字典生成式是为了快速的生成一个字典
name_list = ['jason', 'jenny', 'john', 'tony', 'tom']
# 把上述列表加上对应的k值生成字典
# 方法一:
# 先建立一个空的字典,通过循环列表里的索引把元素添加到字典里
new_dic = {}
for i in range(len(name_list)):
    # 把元素添加到字典里
    new_dic[i] = name_list[i]
# 打印新的字典
print(new_dic)
# 方法二:枚举
# 字典生成式
# 语法结构
'''
enumerate(name_list)
针对该方法循环取值,每次都会产生两个结果
1、默认会从0开始生成数字
2、返回被循环列表里的值
变量名 = {k值:v值 for k v in enumerate(name_list)if 条件}
'''
name_list = ['jason', 'jenny', 'john', 'tony', 'tom']
new_dic = {k:v for k,v in enumerate(name_list) if v != 'jason'}
print(new_dic)
# 迭代器
tup = (i for i,j in enumerate(name_list))
print(tup)

5、匿名函数

# 匿名函数
# 所谓匿名函数就是没有名字的函数
# 语法结构
'''
lambda 形参:返回值
匿名函数一般不单独使用,常常是和其他函数连用
'''
res = lambda x: x**2
print(res)
l = [1,2,3,4,5,6,7,8,9]
# 把列表里的每一个值都平方后放进一个新的列表里
# 方法一:
new_list = []
def index(n):
    for i in n:
        new_list.append(i**2)
    return new_list
res = index(l)
print(res)  # [1, 4, 9, 16, 25, 36, 49, 64, 81]
# 方法二:
# 匿名函数
# 映射函数 map()
'''
映射函数把列表里的每一个值当成实参传给匿名函数,最后生成一个列表
'''
l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list(map(lambda x: x ** 2, l)))  # [1, 4, 9, 16, 25, 36, 49, 64, 81]

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/103402.html

(0)

相关推荐

  • JVM的艺术之如何使用类加载器

    技术JVM的艺术之如何使用类加载器这篇文章主要讲解了“JVM的艺术之如何使用类加载器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JVM的艺术之如何使用类加载器”吧!正式

    攻略 2021年10月23日
  • 前端异步请求axios的介绍与用法

    技术前端异步请求axios的介绍与用法 前端异步请求axios的介绍与用法官网
    http://www.axios-js.com/
    axios是什么1.Axios是一个基于promise的HTTP库,可以

    礼包 2021年11月24日
  • 以太坊公链的路线(以太坊如何销毁简单解释)

    技术以太坊如何将自定义数据写入到区块链中小编给大家分享一下以太坊如何将自定义数据写入到区块链中,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

    攻略 2021年12月25日
  • snow形容词,车上snow是什么意思

    技术snow形容词,车上snow是什么意思一,SNOW是雪地模式的意思。二,snow是雪地模式在仪表盘上的显示。1,snow,在变速器旁边一般会有个SNOW按键,按下SNOW按键后,汽车以雪地模式行驶,适合积雪或湿滑地面

    生活 2021年10月23日
  • 野心勃勃是什么意思,“雄心壮志”是什么意思

    技术野心勃勃是什么意思,“雄心壮志”是什么意思远大的理想和抱负,宏伟的志愿野心勃勃是什么意思。出处:朝代:晋朝作者:陆机原文:《吊魏武帝文》:雄心摧于弱情,壮图终于哀志。白话释义:雄心挫败在弱情,壮图最终在哀志。成语用法

    生活 2021年10月24日
  • JavaScript怎么实现自定义日历效果

    技术JavaScript怎么实现自定义日历效果本篇内容主要讲解“JavaScript怎么实现自定义日历效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript怎

    攻略 2021年11月8日