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不规范的日期字符串处理类
Jun 10 Python
python简单获取数组元素个数的方法
Jul 13 Python
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
Apr 27 Python
Python信息抽取之乱码解决办法
Jun 29 Python
如何利用Python分析出微信朋友男女统计图
Jan 25 Python
python按修改时间顺序排列文件的实例代码
Jul 25 Python
python 三元运算符使用解析
Sep 16 Python
python银行系统实现源码
Oct 25 Python
python 实现图片上传接口开发 并生成可以访问的图片url
Dec 18 Python
屏蔽Django admin界面添加按钮的操作
Mar 11 Python
python爬虫中抓取指数的实例讲解
Dec 01 Python
TensorFlow2.0使用keras训练模型的实现
Feb 20 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 HTML代码串截取代码
2008/12/29 PHP
php数组一对一替换实现代码
2012/08/31 PHP
PHP获取一个字符串中间一部分字符的方法
2014/08/19 PHP
thinkPHP中验证码的简单使用方法
2015/12/26 PHP
thinkphp分页集成实例
2017/07/24 PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
2019/06/14 PHP
jquery清空textarea等输入框实现代码
2013/04/22 Javascript
JavaScript将取代AppleScript?
2014/09/18 Javascript
jQuery使用height()获取高度需要注意的地方
2014/12/13 Javascript
JS Ajax请求如何防止重复提交
2016/06/13 Javascript
jQuery实现可拖拽的许愿墙效果【附demo源码下载】
2016/09/14 Javascript
从零学习node.js之mysql数据库的操作(五)
2017/02/24 Javascript
微信小程序wx.previewImage预览图片实例详解
2017/12/07 Javascript
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
2020/02/06 NodeJs
js实现盒子拖拽动画效果
2020/08/09 Javascript
ant design中upload组件上传大文件,显示进度条进度的实例
2020/10/29 Javascript
JavaScript实现网页tab栏效果制作
2020/11/20 Javascript
python读取Android permission文件
2013/11/01 Python
Django Admin实现三级联动的示例代码(省市区)
2018/06/22 Python
Python pyinotify模块实现对文档的实时监控功能方法
2018/10/13 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
python hashlib加密实现代码
2019/10/17 Python
python实现五子棋游戏(pygame版)
2020/01/19 Python
python判断元素是否存在的实例方法
2020/09/24 Python
HTML5未来发展趋势
2016/02/01 HTML / CSS
世界著名的顶级牛排:Omaha Steak(奥马哈牛排)
2016/09/20 全球购物
世界上最大的曲棍球商店:Pro Hockey Life
2017/10/30 全球购物
中西医专业毕业生职业规划书
2014/02/24 职场文书
建筑投标担保书
2014/05/20 职场文书
十佳标兵事迹材料
2014/08/18 职场文书
南京市纪委监察局整改方案
2014/09/16 职场文书
学雷锋日活动总结
2015/02/06 职场文书
上甘岭观后感
2015/06/10 职场文书
Python 详解通过Scrapy框架实现爬取百度新冠疫情数据流程
2021/11/11 Python
php去除数组中为0的元素的实例分析
2021/11/17 PHP