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性能优化技巧
Mar 09 Python
python实现支持目录FTP上传下载文件的方法
Jun 03 Python
python中将字典形式的数据循环插入Excel
Jan 16 Python
Python浅复制中对象生存周期实例分析
Apr 02 Python
基于python list对象中嵌套元组使用sort时的排序方法
Apr 18 Python
Pandas过滤dataframe中包含特定字符串的数据方法
Nov 07 Python
Python 写入训练日志文件并控制台输出解析
Aug 13 Python
python求一个字符串的所有排列的实现方法
Feb 04 Python
python连接mongodb集群方法详解
Feb 13 Python
python中Ansible模块的Playbook的具体使用
May 28 Python
python在一个范围内取随机数的简单实例
Aug 16 Python
通俗易懂了解Python装饰器原理
Sep 17 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接收POST数据,解析json数据
2013/06/28 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解
2016/03/05 PHP
PHP实现微信图片上传到服务器的方法示例
2017/06/29 PHP
详解php反序列化
2020/06/10 PHP
js实现的GridView即表头固定表体有滚动条且可滚动
2014/02/19 Javascript
JS中判断null、undefined与NaN的方法
2014/03/26 Javascript
js中的cookie的读写操作示例详解
2014/04/17 Javascript
javascript判断css3动画结束 css3动画结束的回调函数
2015/03/10 Javascript
jQuery增加与删除table列的方法
2016/03/01 Javascript
纯js实现瀑布流布局及ajax动态新增数据
2016/04/07 Javascript
AngularJS 路由和模板实例及路由地址简化方法(必看)
2016/06/24 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
2016/11/09 Javascript
最常用的jQuery表单验证(简单)
2017/05/23 jQuery
解决jQuery ajax动态新增节点无法触发点击事件的问题
2017/05/24 jQuery
微信小程序三级联动地址选择器的实例代码
2017/07/12 Javascript
vue.js实现点击后动态添加class及删除同级class的实现代码
2018/04/04 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
2018/05/21 Javascript
浅谈对于react-thunk中间件的简单理解
2019/05/01 Javascript
亲自动手实现vue日历控件
2019/06/26 Javascript
vue内置组件component--通过is属性动态渲染组件操作
2020/07/28 Javascript
在python中获取div的文本内容并和想定结果进行对比详解
2019/01/02 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
python3发送邮件需要经过代理服务器的示例代码
2019/07/25 Python
python循环输出三角形图案的例子
2019/11/22 Python
python 画函数曲线示例
2019/12/04 Python
HTML5 SEO优化的一些建议
2020/08/27 HTML / CSS
加拿大最大的钻石商店:Peoples Jewellers
2018/01/01 全球购物
北美最大的零售退货翻新商:VIP Outlet
2019/11/21 全球购物
项目建议书范文
2014/05/12 职场文书
员工教育培训协议书
2014/09/27 职场文书
项目负责人岗位职责
2015/02/15 职场文书
2015年防汛工作总结
2015/05/15 职场文书
Python NumPy灰度图像的压缩原理讲解
2021/08/04 Python
Go语言基础函数基本用法及示例详解
2021/11/17 Golang
Java tomcat手动配置servlet详解
2021/11/27 Java/Android