Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法


Posted in Python onJune 05, 2019

一. lamda匿名函数

为了解决一些简单的需求而设计的一句话函数

# 计算n的n次方
def func(n):
 return n**n
print(func(10))
f = lambda n: n**n
print(f(10))

lambda表示的是匿名函数. 不需要用def来声明, 一句话就可以声明出一个函数

语法:

函数名 = lambda 参数: 返回值

注意:

1. 函数的参数可以有多个. 多个参数之间用逗号隔开

2. 匿名函数不管多复杂. 只能写一行, 且逻辑结束后直接返回数据

3. 返回值和正常的函数一样, 可以是任意数据类型

匿名函数并不是说一定没有名字. 这里前面的变量就是一个函数名. 说他是匿名原因是我们通过__name__查看的时候是没有名字的. 统一都叫lambda. 在调用的时候没有什么特别之处.像正常的函数调用即可

 二. sorted() 排序函数

语法: sorted(Iterable, key=None, reverse=False)

Iterable: 可迭代对象

key: 排序规则(排序函数), 在sorted内部会将可迭代对象中的每一个元素传递给这个函数的参数. 根据函数运算的结果进行排序

 

reverse: 是否是倒叙. True: 倒叙, False: 正序

lst = [1,5,3,4,6]
lst2 = sorted(lst)
print(lst) # 原列表不会改变
print(lst2) # 返回的新列表是经过排序的
dic = {1:'A', 3:'C', 2:'B'}
print(sorted(dic)) # 如果是字典. 则返回排序过后的key

和函数组合使用

# 根据字符串长度进行排序
lst = ["鲁班七号", "程咬金", "安琪拉", "阿珂"]
# 计算字符串长度
def func(s):
 return len(s)
print(sorted(lst, key=func))

和lambda组合使用

# 根据字符串长度进行排序
lst = ["鲁班七号", "程咬金", "安琪拉", "阿珂"]
# 计算字符串长度
def func(s):
 return len(s)
print(sorted(lst, key=lambda s: len(s)))
lst = [{"id":1, "name":'鲁班', "age":28},
  {"id":2, "name":'安琪拉', "age":16},
  {"id":3, "name":'阿珂', "age":25}]
# 按照年龄对信息进行排序
print(sorted(lst, key=lambda e: e['age']))

三. filter() 筛选函数

语法: filter(function. Iterable)

function: 用来筛选的函数. 在filter中会自动的把iterable中的元素传递给function. 然后根据function返回的True或者False来判断是否保留此项数据

4. map() 映射函数

Iterable: 可迭代对象

lst = [1,2,3,4,5,6,7]
ll = filter(lambda x: x%2==0, lst) # 筛选所有的偶数
print(ll)
print(list(ll))
lst = [{"id":1, "name":'鲁班', "age":18},
  {"id":2, "name":'安琪拉', "age":16},
  {"id":3, "name":'阿珂', "age":17}]
fl = filter(lambda e: e['age'] > 16, lst) # 筛选年龄大于16的数据
print(list(fl))

四. map() 映射函数

语法: map(function, iterable) 可以对可迭代对象中的每一个元素进行映射. 分别取执行function

计算列表中每个元素的平方,返回新列表

def func(e):
 return e*e
mp = map(func, [1, 2, 3, 4, 5])
print(mp)
print(list(mp))

改写成lambda

print(list(map(lambda x: x * x, [1, 2, 3, 4, 5])))

计算两个列表中相同位置的数据的和

# 计算两个列表相同位置的数据的和
lst1 = [1, 2, 3, 4, 5]
lst2 = [2, 4, 6, 8, 10]
print(list(map(lambda x, y: x+y, lst1, lst2)))

五. 递归

在函数中调用函数本身,就是递归

def func():
 print("我是递归")
 func()
func()

在python中递归的深度最大到998

def foo(n):
 print(n)
 n += 1
 foo(n)
foo(1) 

递归的应用:

我们可以使用递归来遍历各种树形结构, 比如我们的文件夹系统. 可以使用递归来遍历该文件夹中的所有文件

import os
def func(filepath,n):
 files = os.listdir(filepath) # 查案当前文件的目录
 for file in files: # 获取每一个文件名
  # 获取文件路径
  file_p = os.path.join(filepath,file)
  if os.path.isdir(file_p): # 判断file是否是一个文件夹
   print("\t"*n,file)
   func(file_p,n+1)
  else:
   print("\t"*n,file)
func("/Volumes/扩展盘/网站css",0)

六. 二分查找

二分查找. 每次能够排除掉一半的数据. 查找的效率非常高. 但是局限性比较大. 必须是有序序列才可以使用二分查找

要求: 查找的序列必须是有序序列.

# 判断n是否在lst中出现. 如果出现请返回n所在的位置
lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789]
# 非递归算法
# 使用二分法可以提高效率 前提条件有序序列
n = 88
left = 0
right = len(lst) - 1

while left <= right: # 边界,当右边比左边还小的时候退出循环
 mid = (left + right) // 2 # 这里必须是整除,应为索引没有小数
 if lst[mid] > n:
  right = mid - 1
 if lst[mid] < n:
  left = mid + 1
 if lst[mid] == n:
  print("找到这个数")
  break
else:
 print("没有这个数!")

# 递归来完成二分法
lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789]
def func(n,left,right):
 if left <= right:
  mid = (left + right) // 2
  if n > lst[mid]:
   left = mid + 1
   return func(n,left,right) # 递归,递归入口
  elif n < lst[mid]:
   right = mid - 1
   # 深坑,函数的返回值返回给调用者
   return func(n,left,right) # 递归
  elif lst[mid] == n:
   # print("找到了")
   return mid
 else:
  print("没找到")
  return -1 # 避免返回None

# 找66,左边界0,右边界len(lst) - 1
ret = func(66,0,len(lst) - 1)
print(ret)
# 递归二分法另一种形式,但是无法实现位置计算
lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789]
def func(lst,target):
 left = 0
 right = len(lst) - 1
 if left > right:
  print("没有这个数")
 middle = (left + right)//2
 if target < lst[middle]:
  return func(lst[:middle],target)
 elif target > lst[middle]:
  return func(lst[middle + 1:],target)
 elif target == lst[middle]:
  print("找到这个数了")
func(lst,101)

核心: 掐头去尾取中间. 一次砍一半

 

两种算法: 常规循环, 递归循环

# 时间复杂度最低, 空间复杂度最低
lst1 = [5,6,7,8]
 lst2 = [0,0,0,0,0,1,1,1,1]
 for el in lst1:
 lst2[el] = 1
 lst2[4] == 1 # o(1)

总结

以上所述是小编给大家介绍的Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python存取XML的常见方法实例分析
Mar 21 Python
python使用turtle库绘制树
Jun 25 Python
详解python的四种内置数据结构
Mar 19 Python
Python测试Kafka集群(pykafka)实例
Dec 23 Python
在django admin详情表单显示中添加自定义控件的实现
Mar 11 Python
python json.dumps中文乱码问题解决
Apr 01 Python
python shapely.geometry.polygon任意两个四边形的IOU计算实例
Apr 12 Python
使用Python将语音转换为文本的方法
Aug 10 Python
python装饰器三种装饰模式的简单分析
Sep 04 Python
python安装mysql的依赖包mysql-python操作
Jan 01 Python
基于python制作简易版学生信息管理系统
Apr 20 Python
Python Django获取URL中的数据详解
Nov 01 Python
记录Python脚本的运行日志的方法
Jun 05 #Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
Jun 05 #Python
分享8个非常流行的 Python 可视化工具包
Jun 05 #Python
Django组件cookie与session的具体使用
Jun 05 #Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
Jun 05 #Python
python3下载抖音视频的完整代码
Jun 05 #Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
Jun 04 #Python
You might like
PHP Mysql编程之高级技巧
2008/08/27 PHP
一贴学会PHP 新手入门教程
2009/08/03 PHP
PHP实现多图片上传类实例
2014/07/26 PHP
PHP编写文件多服务器同步程序
2016/07/02 PHP
PHP中FTP相关函数小结
2016/07/15 PHP
PHP图像处理 imagestring添加图片水印与文字水印操作示例
2020/02/06 PHP
用js自动判断浏览器分辨率的代码
2007/01/28 Javascript
网页中实现浏览器的最大,最小化和关闭按钮
2007/03/12 Javascript
EXT中xtype的含义分析
2010/01/07 Javascript
jQuery $.data()方法使用注意细节
2012/12/31 Javascript
获取非最后一列td值并将title设为该值的方法
2013/10/30 Javascript
jQuery代码实现发展历程时间轴特效
2015/07/30 Javascript
jquery购物车结算功能实现方法
2020/10/29 Javascript
浅析如何利用angular结合translate为项目实现国际化
2016/12/08 Javascript
Bootstrap栅格系统的使用和理解2
2016/12/14 Javascript
javascript设计模式之策略模式学习笔记
2017/02/15 Javascript
解决webpack打包速度慢的解决办法汇总
2017/07/06 Javascript
Vue之mixin全局的用法详解
2018/08/22 Javascript
webpack css加载和图片加载的方法示例
2018/09/11 Javascript
webpack4+react多页面架构的实现
2018/10/25 Javascript
Vue在 Nuxt.js 中重定向 404 页面的方法
2019/04/23 Javascript
python中datetime模块中strftime/strptime函数的使用
2018/07/03 Python
Python -m参数原理及使用方法解析
2020/08/21 Python
Python APScheduler执行使用方法详解
2020/12/10 Python
五款漂亮的纯CSS3动画按钮的实例教程
2014/11/21 HTML / CSS
一款基于css3和jquery实现的动画显示弹出层按钮教程
2015/01/04 HTML / CSS
牵手50香港:专为黄金岁月的单身人士而设的交友网站
2020/08/14 全球购物
酒店总经理欢迎词
2014/01/15 职场文书
怎样填写就业意向
2014/04/02 职场文书
舞蹈专业求职信
2014/06/13 职场文书
人事经理岗位职责范本
2014/08/04 职场文书
故宫的导游词
2015/01/31 职场文书
家长会主持词开场白
2015/05/29 职场文书
捐款仪式主持词
2015/07/04 职场文书
2015大学党建带团建工作总结
2015/07/23 职场文书
怎样写工作总结啊!
2019/06/18 职场文书