Python递归函数、算法和三元表达式

一、递归函数

"递"是传递的意思,"归"是归还的意思,先把一个方法一层层传递下去,然后传递到最后一层再把结果归还回来。实质上,递归就是把一个大问题不断拆解,像剥洋葱一样,最终拆解到最小层面,会返回解题结果。

def index():
	print(index)
	home()
def home():
	print(home)
	index()

index()

递归在现实编码中是不允出现的,一旦出现递归就会无限报错

1.递归使用场景

1、至少有一个明确的递归结束条件;

2、给出递归终止时的处理办法;

3、每次进入更深一层递归时,问题规模(计算量)相比上次递归都应有所减少

代码实现以上逻辑

'''现已知8人每个人都是比前一位人大2岁,第一个人18岁,求第八人多少岁'''
def age(n):
    if n == 1:
        return 18 # 已知第一个人年龄
    return age(n-1) + 2

res = age(8)
print(res)

二、算法二分法

算法:算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。高效解决问题

#二分法使用场景:在一个列表中查找某个数字是否存在
l = [1, 3, 4, 5, 33, 33, 22, 55, 77, 88, 99, 66, 11, 33]
'''查找数字66是否在这个列表内'''
思路:
	遍历列表中每一个元素
	for i in l:
		i == 66
		print('找到了')

二分法:
	1. 列表必须是从小到大排序
	2. 折半找

#1.先排序
l.sort()
#2.把要找的数字定义出来
number = 66
def index(l,number):
	middle = len(l) // 2
	if number > l[middle]:
		right = l[middle + 1:]
		index(right,number)
	elif number < l[middle]:
		left = l[:middle]
		index(left,number)
	else:
		print('找到了')
	

index()

三、三元表达式

写一个比较两个值大小的函数,返回大的

def max(a, b):
    if a > b:
        return a
    else:
        return b


res = max(1, 2)
print(res)

当判断条件二选一是推荐使用三元表达式

def max(a, b):
	return a if a > b else b
	#res = 条件成立之后的结果 if 条件 else 条件不成立之后的结果
res = max(1, 2)
print(res)
"""还支持嵌套"""
## 不推荐写太多的嵌套,一般两层就够了,超过两层了,建议不这样写,面试的时候:成数非常多
res = 2 if 2 > 10 else ( 10 if False else (100 if 10 > 5 else (2 if False else 1)))
print(res)

四、列表生成式


#把列表中得每一个名字后面都拼上后缀_SB
names_list = ['kevin', 'jerry', 'tank', 'oscar']

#把列表中得每一个名字后面都拼上后缀_SB
new_list = [] # 存放拼接之后的人名
for name in names_list:
	res = '%s_SB' % name
	res = name + '_SB'
	new_list.append(res)
print(new_list)  # ['kevin_SB', 'jerry_SB', 'tank_SB', 'oscar_SB']

 # 列表生成式
res = [ name + '_SB' for name in names_list]
print(res)
names_list = ['kevin', 'jerry', 'tank', 'oscar']
# 列表中得每一个名字都拼接上后缀:_SB,除jerry之外

new_list = []
for name in names_list:
    if name == 'jerry':
        new_list.append(name)
        continue
    else:
        new_list.append(name+'_SB')
print(new_list)

# 列表生成式如何写
res = [name+'_SB' if name != 'jerry' else name for name in names_list]
print(res)

五、字典生成式、集合生成式

list = ['name', 'age', 'gender']
list1 = ['sb', 18, 'male']
d = {}
for i in range(len(list)):
	d[list[i]] = list1[i]
print(d) # {'name': 'oscat', 'age': 18, 'gender': 'male'}

补充一种用法 enumerate

d = {list[i]:list1[i] for i, j in enumerate(list)}
print(d)# {'name': 'oscat', 'age': 18, 'gender': 'male'}

没有元祖生成式

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值