Python-递归、三元表达式列表生成式等
一、函数递归
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':,
'alex':,
'wupeiqi':,
'yuanhao':
}
# 求最大值
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)
Python-递归、三元表达式列表生成式等的更多相关文章
- python递归-三元表达式-列表生成式-字典生成式-匿名函数-部分内置函数-04
递归 递归: # 函数在调用阶段直接或间接地又调用了自身 应用场景: # 将列表中的数字依次打印出来(循环的层数是你必须要考虑的点) --> l = [1, [2, [3, [4, [5, ...
- Python 函数递归-三元表达式-列表生成式-字典生成式-匿名函数-内置函数
上节课复习: 1. 无参装饰器 def 装饰器名字(func): def wrapper(*args,**kwargs): res = func(*args,**kwargs) return res ...
- python之三元表达式与生成式与匿名与内置函数(部分)
目录 三元表达式 各种生成式 列表生成式(可同样作用于集合) 字典生成式 匿名函数 重要内置函数 map() zip() filter() reduce() 常见内置函数(部分) 三元表达式 三元表达 ...
- python基础-三元表达式/列表推导式/生成器表达式
1.三元表达式:如果成立返回if前的内容,如果不成立返回else的内容 name=input('姓名>>: ') res='SB' if name == 'alex' else 'NB' ...
- 初学Python(十)——列表生成式
初学Python(十)--列表生成式 初学Python,主要整理一些学习到的知识点,这次是列表生成式. # -*- coding:utf-8 -*- ''''' 列表生成式 ''' #一行代码表达所有 ...
- Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数
本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================ ...
- python之三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数
一 三元表达式.列表推导式.生成器表达式 一 三元表达式 name=input('姓名>>: ') res='SB' if name == 'alex' else 'NB' print(r ...
- python之三元表达式、列表推导、生成器表达式、递归、匿名函数、内置函数
目录 一 三元表达式 二 列表推到 三 生成器表达式 四 递归 五 匿名函数 六 内置函数 一.三元表达式 def max(x,y): return x if x>y else y print( ...
- python 三元表达式 列表推导式,生成器表达式。递归,匿名函数, 内置函数
三元表达式 三元表达式仅应用于: 1.条件成立返回一个值 2.条件不成立返回一个值 res = x if x>y else y print(res) name= input("姓名&g ...
随机推荐
- ubuntu18.04中安装和卸载cuDNN
udnn安装注意点: cudnn的安装其实很简单,关键点是一定要安装cuda对应的cudnn包,本机中安装的cuda7.5所以对应的cudnn为v5.1这很重要,我就是安装错了版本,导致后面caffe ...
- Coursera Deep Learning 2 Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization - week1, Assignment(Initialization)
声明:所有内容来自coursera,作为个人学习笔记记录在这里. Initialization Welcome to the first assignment of "Improving D ...
- loj 6436 PKUSC2018 神仙的游戏
传送门 好妙蛙 即串\(s\)长度为\(n\)首先考虑如果一个长度为\(len\)的\(border\)存在,当且仅当对所有\(i\in[1,len],s[i]=s[n-len+i]\),也就是所有模 ...
- 第27月第25天 clang -rewrite-objc main.m
1.clang -rewrite-objc main.m #import <objc/runtime.h> #import<objc/message.h> #import &l ...
- scrapy和scrapy_redis入门
Scarp框架 需求 获取网页的url 下载网页内容(Downloader下载器) 定位元素位置, 获取特定的信息(Spiders 蜘蛛) 存储信息(ItemPipeline, 一条一条从管里走) 队 ...
- P2709 小B的询问(莫队入门)
题目链接:https://www.luogu.org/problemnew/show/P2709 题目大意:中文题目 具体思路:莫队入门题,按照离线的方式打的,对每一个区间进行分块和编号,如果在同一个 ...
- Flask表单(form)的应用
导入模块request模块 #指定请求方式,使用methods属性 @app.route("/",methods=['GET','POST']) def index(): #判断c ...
- java程序中默认浮点形值常量是什么类型的?如何区分不同类型的浮点型整数值常量?
java程序中默认浮点形值常量是什么类型的 默认的所有的浮点型数值都是double型
- Microsoft SQL - 指令
exec指令 查询数据库详细状态 exec sp_helpdb 数据库名称 修改数据库名称 exec sp_rename oldname,new_name 查看表状态 exec sp_help 表名称 ...
- Python学习笔记-随机数
IronPython的random 只能在0-0.5之间,所以最后调用了C#的Random. #!/usr/bin/python #coding=utf-8 import random import ...