1. 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,在调⽤的时候没有什么特别之处,像正常的函数调⽤即可。

2. 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":'alex', "age":18}, {"id":2, "name":'wusir', "age":16}, {"id":3, "name":'taibai', "age":17}]
# 按照年龄对学⽣信息进⾏排序
print(sorted(lst, key=lambda e: e['age']))

3. filter()

筛选函数
语法:
fifilter(function. Iterable)
  function: ⽤来筛选的函数,在fifilter中会⾃动的把iterable中的元素传递给function,然后根据function返回的True或者False来判断是否保留此项数据
  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":'alex', "age":18}, {"id":2, "name":'wusir', "age":16}, {"id":3, "name":'taibai', "age":17}]
fl = filter(lambda e: e['age'] > 16, lst) # 筛选年龄⼤于16的数据
print(list(fl))

4. 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)))

5. 递归

在函数中调⽤函数本⾝,就是递归
def func():
  print("我是谁")
  func()
func()
在python中递归的深度最⼤到998
def foo(n):
  print(n)
  n += 1
  foo(n)
foo(1)
递归的应⽤:
我们可以使⽤递归来遍历各种树形结构,比如我们的⽂件夹系统,可以使⽤递归来遍历该⽂件夹中的所有⽂件。
import os
def read(filepath, n):
  files = os.listdir(filepath) # 获取到当前⽂件夹中的所有⽂件
  for fi in files: # 遍历⽂件夹中的⽂件, 这⾥获取的只是本层⽂件名
    fi_d = os.path.join(filepath,fi) # 加⼊⽂件夹 获取到⽂件夹+⽂件
    if os.path.isdir(fi_d): # 如果该路径下的⽂件是⽂件夹
      print("\t"*n, fi)
      read(fi_d, n+1) # 继续进⾏相同的操作
    else:
      print("\t"*n, fi) # 递归出⼝. 最终在这⾥隐含着return

#递归遍历⽬录下所有⽂件
read('../oldboy/', 0)

6. 二分查找

⼆分查找,每次能够排除掉⼀半的数据,查找的效率非常⾼,但是局限性比较⼤,必须是有
序序列才可以使⽤⼆分查找。
要求: 查找的序列必须是有序序列。
# 判断n是否在lst中出现. 如果出现请返回n所在的位置
# ⼆分查找---⾮递归算法
lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789]
n = 567
left = 0
right = len(lst) - 1
count = 1
while left <= right:
  middle = (left + right) // 2
  if n < lst[middle]:
    right = middle - 1
  elif n > lst[middle]:
    left = middle + 1
  else:
    print(count)
    print(middle)
    break
  count = count + 1
else:
  print("不存在")

# 普通递归版本⼆分法
def binary_search(n, left, right):
  if left <= right:
    middle = (left+right) // 2
    if n < lst[middle]:
      right = middle - 1
    elif n > lst[middle]:
      left = middle + 1
    else:
      return middle
    return binary_search(n, left, right) # 这个return必须要加. 否则接收到的永远是None.
  else:
    return -1

print(binary_search(567, 0, len(lst)-1))

# 另类⼆分法, 很难计算位置.
def binary_search(ls, target):
  left = 0
  right = len(ls) - 1
  if left > right:
    print("不在这⾥")
  middle = (left + right) // 2
  if target < ls[middle]:
    return binary_search(ls[:middle], target)
  elif target > ls[middle]:
    return binary_search(ls[middle+1:], target)
  else:
    print("在这⾥")

binary_search(lst, 567)

最新文章

  1. java17
  2. TIOBE Index for December 2015(转载)
  3. python基础随笔
  4. 【Xamarin挖墙脚系列:典型的业务程序的结构搭建】
  5. 面试题之String str = new String(&quot;abc&quot;); 创建了几个对象
  6. AWR报告生成
  7. 玩转SpringBoot之定时任务详解
  8. 如何使用 Lucene 做网站高亮搜索功能?
  9. SQL学习 存储过程&amp;DUAL表
  10. jQuery分步步骤
  11. Android逆向之旅---Native层的Hook神器Cydia Substrate使用详解
  12. shell 脚本实战笔记(5)--搭建资源的镜像服务器
  13. oracle 启动报错ORA-27125解决方案
  14. Linux自动化部署尝试
  15. lintcode-424-逆波兰表达式求值
  16. centos7 安装dnf包管理器和常用命令
  17. 北京Uber优步司机奖励政策(12月27日)
  18. POJ1062 昂贵的聘礼(带限制的spfa)
  19. android 支付宝集成 使用常见错误
  20. EOS区块同步源码分析之见证者

热门文章

  1. Googleplaystore数据分析
  2. 小程序 if else
  3. Python之format()函数
  4. NFS文件系统及搭建NFS共享服务
  5. Vue 从入门到进阶之路(十一)
  6. python爬虫公众号所有信息,并批量下载公众号视频
  7. Swoole中内置Http服务器
  8. Ext.ux.UploadDialog上传大文件 HTTP 错误 413.1 - Request Entity Too Large Web 服务器拒绝为请求提供服务,因为该请求实体过大。Web 服务器无法为请求提供服务,因为它正尝试与客户证书进行协商,但请求实体过大。
  9. es6 之class介绍
  10. 一文解读MPA/SPA(转)