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

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

相关推荐

  • javascript中怎么实现一个基于DOM的模板引擎

    技术javascript中怎么实现一个基于DOM的模板引擎本篇内容主要讲解“javascript中怎么实现一个基于DOM的模板引擎”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习

    攻略 2021年11月15日
  • leetcode数组找最大数(leetcode排序中查找元素)

    技术LeetCode如何在排序数组中查找元素的第一个和最后一个位置这篇文章主要介绍LeetCode如何在排序数组中查找元素的第一个和最后一个位置,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 一

    攻略 2021年12月15日
  • 没有配置环境变量django可以用吗(创建django时如何选择编译器)

    技术启动uwsgi报错提示找不到django的模块怎么办小编给大家分享一下启动uwsgi报错提示找不到django的模块怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获

    攻略 2021年12月18日
  • 关于Java和.Net的感想有哪些

    技术关于Java和.Net的感想有哪些本篇文章给大家分享的是有关关于Java和.Net的感想有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

    攻略 2021年12月2日
  • adobe download manager 未响应(adobe download manager 停止工作)

    技术Adobe ColdFusion 任意命令执行漏洞的示例分析这篇文章将为大家详细讲解有关Adobe ColdFusion 任意命令执行漏洞的示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文

    攻略 2021年12月22日
  • 前端开发之JQuery入门基础操作

    技术前端开发之JQuery入门基础操作 前端开发之JQuery入门基础操作下载JQuery
    目前jQuery有三个大版本:
    1.x:兼容ie678,使用最为广泛的,官方只做BUG维护,功能不再新增。因此

    礼包 2021年11月1日