Python-递归、三元表达式列表生成式等

简介: 一、函数递归 1.什么是函数递归:函数的递归调用是函数嵌套的一种特殊形式,在调用一个函数的过程中又直接或者间接地调用该函数本身,称之为函数的递归调用 2.递归调用必须明确的两个阶段:   1.回溯:一次次递归调用下去,应该让每一次重复问题的规模有所减少,直到逼近最终的结果,即回溯阶段一定要有明确的结束条件   2.

一、函数递归

1.什么是函数递归:函数的递归调用是函数嵌套的一种特殊形式,在调用一个函数的过程中又直接或者间接地调用该函数本身,称之为函数的递归调用

2.递归调用必须明确的两个阶段:

  1.回溯:一次次递归调用下去,应该让每一次重复问题的规模有所减少,直到逼近最终的结果,即回溯阶段一定要有明确的结束条件

  2.递推:往回一层一层推算结果

例子:

# def age(n):
#     if n == 1:
#         return 18
#     return age(n-1) + 2
#
#
# print(age(5))

思路:

# age(5)=age(4)+2
# age(4)=age(3)+2
# age(3)=age(2)+2
# age(2)=age(1)+2
# age(1)=18
#
# age(n)=age(n-1)+2 #n>1
# age(n)=18         #n=1

二分法:

# nums=[13,15,17,23,31,53,74,81,93,102,103,201,303,403,503,777]
# find_num=503
#
#
# def binary_search(nums,find_num):
#     print(nums)
#     if len(nums) == 0:
#         print('not exists')
#         return
#     mid_index=len(nums) // 2
#     if find_num > nums[mid_index]:
#         # in the right
#         nums=nums[mid_index+1:]
#         # 重新执行二分的逻辑
#         binary_search(nums,find_num)
#     elif find_num < nums[mid_index]:
#         #in the left
#         nums=nums[0:mid_index]
#         # 重新执行二分的逻辑
#         binary_search(nums,find_num)
#     else:
#         print('find it')

binary_search(nums,find_num)

二、三元表达式

三元表达式实现的效果就是:条件成立的情况下返回一个值,不成立的情况下返回另外一种值

# res=条件成立情况下返回的值  if 条件 else 条件不成立情况下返回的值
name=input('your name: ').strip()
res="SB" if name == 'lqz' else "NB"
print(res)

三、列表生成式

# l =[ i for i in range(10)]
# print(l)
# l = [i for i in range(10) if (i%2)==0]
# print(l)
names = ['alex_sb','lqz_sb','yyh_sb','fm_sb','egon']
l=[name for name in names if name.endswith('sb')]
print(l)

四、字典生成式

keys=[‘name‘,‘age‘,‘sex‘]
values=[‘egon‘,18,‘male‘]
res=zip(keys,values)
print(list(res))    #[(‘name‘, ‘egon‘), (‘age‘, 18), (‘sex‘, ‘male‘)]
方式一
d={ }
for k,v in zip(keys,values):
    d[k]=v
print(d)   #{‘name‘: ‘egon‘, ‘age‘: 18, ‘sex‘: ‘male‘}

方式二
d={k:v for k,v in zip(keys,values)}
print(d)   #{‘name‘: ‘egon‘, ‘age‘: 18, ‘sex‘: ‘male‘}
方式三
dic={k:values[i] for i,k in enumerate(keys)}
print(dic)

补充:zip(拉链函数)

s=‘hello‘
l=[1,2,3,]
res=zip(s,l)
print(list(res))    #[(‘h‘, 1), (‘e‘, 2), (‘l‘, 3)]

五、匿名函数

匿名函数就是没有名字的函数,用于仅仅临时使用一次的场景,没有重复使用的需求,一般和内置函数结合使用

# max,min,sorted,map,filter,reduce

常规函数使用 def 关键字定义,但匿名函数使用 lambda 关键字定义

语法格式为 lambda arguments:expression

  • lambda:定义匿名函数的关键字
  • arguments:函数的参数列表,参数之间用逗号(,)分割。
  • expression:被返回的表达式,且表达式只能有一个(注意: lambda 定义不包含 return语句)。
  • lambda 表达式构建的其实是一个函数对象

 内置函数和匿名函数搭配使用的例子:

salaries={
    'egon':300000,
    'alex':100000000,
    'wupeiqi':10000,
    'yuanhao':2000
}

# 求最大值
res=max(salaries,key=lambda name:salaries[name])  #'egon'
print(res)

# 求最小值
res=min(salaries,key=lambda name:salaries[name])  #'egon'
print(res)

注:max直接返回的是人名,需要使用里面的参数key,通过key指定的函数,将拿到的返回值当做比较依据。

map()函数:

map(function, iterable, ...)

# map:把一个列表按照我们自定义的映射规则映射成一个新的列表
names=['alex','lxx','wxx','yxx']
# res=map(lambda name: name + "dSB", names)
# print(list(res))

filter(func, seq) 
该函数的目的是提取出seq中能使func为true的元素序列。func函数是一个布尔函数,filter()函数调用这个函数一次作用于seq中的每一个元素,筛选出符合条件的元素,并以列表的形式返回。

# names=['alex_sb','lxx_sb','wxx_sb','egon','yxx']
# res=filter(lambda name:name.endswith('sb'),names)
# print(list(res))

reduce() 
格式: 
reduce (func, seq[, init()]) 

# reduce: 把多个值合并成一个结果
from functools import reduce
l=['a','b','c','d']

res=reduce(lambda x,y:x+y,l,'A')
# 'A','a' => 'Aa'
# 'Aa','b'=>'Aab'
# 'Aab','c'=>'Aabc'
# 'Aabc','d'=>'Aabcd'
print(res)

 

焚膏油以继晷,恒兀兀以穷年。
相关文章
|
5天前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
22 14
|
7天前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
23 10
|
24天前
|
数据处理 开发者 Python
Python中的列表推导式:简洁高效的数据处理
在编程世界中,效率和可读性是代码的两大支柱。Python语言以其独特的简洁性和强大的表达力,为开发者提供了众多优雅的解决方案,其中列表推导式便是一个闪耀的例子。本文将深入探讨列表推导式的使用场景、语法结构及其背后的执行逻辑,带你领略这一特性的魅力所在。
|
27天前
|
开发者 Python
探索Python中的列表推导式:简洁而强大的工具
【10月更文挑战第41天】 在编程的世界中,效率与简洁是永恒的追求。本文将深入探讨Python编程语言中一个独特且强大的特性——列表推导式(List Comprehension)。我们将通过实际代码示例,展示如何利用这一工具简化代码、提升性能,并解决常见编程问题。无论你是初学者还是资深开发者,掌握列表推导式都将使你的Python之旅更加顺畅。
|
1月前
|
Python
探索Python中的列表推导式
【10月更文挑战第38天】本文深入探讨了Python中强大而简洁的编程工具——列表推导式。从基础使用到高级技巧,我们将一步步揭示如何利用这个特性来简化代码、提高效率。你将了解到,列表推导式不仅仅是编码的快捷方式,它还能帮助我们以更加Pythonic的方式思考问题。准备好让你的Python代码变得更加优雅和高效了吗?让我们开始吧!
|
1月前
|
算法 Python
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果;贪心算法在每一步选择局部最优解,追求全局最优;动态规划通过保存子问题的解,避免重复计算,确保全局最优。这三种算法各具特色,适用于不同类型的问题,合理选择能显著提升编程效率。
42 2
|
25天前
|
JavaScript 前端开发 算法
python中的列表生成式和生成器
欢迎来到瑞雨溪的博客,这里是一位热爱JavaScript和Vue的大一学生的天地。通过自学前端技术2年半,现正向全栈开发迈进。如果你从我的文章中受益,欢迎关注,我将持续更新高质量内容,你的支持是我前进的动力!🎉🎉🎉
22 0
|
1月前
|
Python
SciPy 教程 之 SciPy 模块列表 16
SciPy教程之SciPy模块列表16 - 单位类型。常量模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了力学单位的使用,如牛顿、磅力和千克力等。
19 0
|
1月前
|
JavaScript Python
SciPy 教程 之 SciPy 模块列表 15
SciPy 教程之 SciPy 模块列表 15 - 功率单位。常量模块包含多种单位,如公制、质量、时间等。功率单位中,1 瓦特定义为 1 焦耳/秒,表示每秒转换或耗散的能量速率。示例代码展示了如何使用 `constants` 模块获取马力值(745.6998715822701)。
16 0
|
1月前
|
JavaScript Python
SciPy 教程 之 SciPy 模块列表 15
SciPy教程之SciPy模块列表15:单位类型。常量模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。功率单位以瓦特(W)表示,1W=1J/s。示例代码展示了如何使用`constants`模块获取马力(hp)的值,结果为745.6998715822701。
19 0