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

技术递归、匿名函数及列表、字典生成式 递归、匿名函数及列表、字典生成式递归、匿名函数及列表、字典生成式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)

相关推荐

  • 如何以Windows Service的方式运行Python程序

    技术如何以Windows Service的方式运行Python程序这期内容当中小编将会给大家带来有关如何以Windows Service的方式运行Python程序,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文

    攻略 2021年11月2日
  • Postgresql性能相关操作系统及数据库说明

    技术Postgresql性能相关操作系统及数据库说明本篇内容主要讲解“Postgresql性能相关操作系统及数据库说明”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Postg

    攻略 2021年11月9日
  • 可可粉,如何制作巧克力

    技术可可粉,如何制作巧克力原料:可可粉可可粉、可可脂、砂糖、牛奶工具:微波炉、大碗、模具
    可可粉、可可脂、(买块状的好一些,当然如果买的是粉装的也行。但是如果买了粉状可可,就要买黄油了)。可可脂买代脂,吃多了不会胖。

    生活 2021年11月1日
  • 择其善者而从之的从的意思,择其善者而从之的,而是什么意思

    技术择其善者而从之的从的意思,择其善者而从之的,而是什么意思而表示顺承关系,虚词,连接两个动作,无实意。补充:择其善者而从之,其不善者而改之翻译:我选择他善的方面向他学习,看到他不善的方面就对照自己改正自己的缺点.虚心好

    生活 2021年10月24日
  • 单数第三人称,英语语法哪些词是第三人称单数

    技术单数第三人称,英语语法哪些词是第三人称单数1.人称代词 he, she, it 属于第三人称单数单数第三人称。eg.How old is he?2.不定代词everyone, something, nobody, e

    生活 2021年10月22日
  • python多线程如何秒爬猫眼电影

    技术python多线程如何秒爬猫眼电影这篇文章主要介绍python多线程如何秒爬猫眼电影,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!通过python3的多线程,获取猫眼电影top100电影清单,

    攻略 2021年11月24日