1,lamdba匿名函数:为了解决一下简单的需求而设计的一句话函数,语法: 函数名 = lambda 参数: 返回值

def func(n):
return n*n
print(func(3))
a = func
a(3) # 调用函数,并给函数传值
print(a.__name__) # 查看函数的函数名, 打印出来的是func
#使用lambda匿名函数写:
f = lambda n : n*n # 用labbda函数一句话就可以把表达式完成
print(f) # f里边的小括号放参数,在这里f是函数名(其实是个变量)
  • ***###注意###***

    • 1>函数的参数可以有多个,多个参数之间用,隔开
    • 2>匿名函数不管多复杂,只能写一行,且逻辑结束后直接返回数据
    • 3>返回值和正常函数一样,可以是任意数据类型

2,sorted()函数排序函数,语法是:sorted(iterable, key=None, reverse=False)Iterable:是可迭代对象,key:排序规则(排序函数),在sorted内部将可迭代对象中的每一个元素传给这个函数的参数,根据函数运行的结果进行排序.reverse是否为倒序(在这里涉及一个判断)如果reverse= True表示执行倒序,当reverse = False时,表示不执行倒序.要想进行排序,必须得最后处理结果是数字,因为只有数字才能进行排序,否则是字符串什么的不可排序.

lst = [11, 33, 55, 22, 44, 99, 77, 66, 55, 88]
def func(lst): # 声明函数func
return lst
ll = sorted(lst, key=func, reverse=False) # 正序严格按照语法写
print(ll) # [11,22,33,44,55,55,66,77,88,99]#
# lambda # 的写法:
l2 = (lst, key=lambda i:i, reverse=False) # 调用lambda函数默认正序,reverse=False,倒序的时候必须写
print(l2) # 排序在愿列表中进行

3,filter()筛选函数,语法:(function, 条件判断(eg: i : i %2==0), Iterable)

  • function是用来筛选函数的,在filter中会自动把元素传递给function,然后根据function返回的True还是False来判断是否保留数据
lst = [11, 22, 55, 6, 4, 33, 44, 88, 7, 9, 7, 5, 4]
ll = filter(lambda i:i%2==0, lst) # 筛选以后形成一个全新的的列表
print(ll) # <filter object at 0x000001C7851ED2E8>
print(list(ll)) # [22, 6, 4, 44, 88, 4] lst = [
{"id": 1, "name": "alex", "age": 18},
{"id": 2, "name": "wusir", "age": 16},
{"id": 3, "name": "taibai", "age": 17}
]
f1 = filter(lambda e: e["age"] > 16, lst) # 筛选出年龄大于16的数据
print(list(f1)) # [{'id': 1, 'name': 'alex', 'age': 18}, {'id': 3, 'name': 'taibai', 'age': 17}]

4,map()映射函数,语法:map(function,Iterable)可以对可迭代对象中的每一个元素进行映射,分别去执行function(函数)  

lst = [1, 2, 3, 4, 5, 6]
ll = map(lambda i:i*i, lst) # 对列表中的每个元素进行自己乘以自己(自己乘以自己)
print(list(ll)) # [1, 4, 9, 16, 25, 36],出来的是一个全新的列表
lst1 = [1, 2, 3]
lst2 = [4, 5, 6]
ll = map(lambda x, y: x+y, lst1, lst2) # 将2个列表中的每一个元素按相同的索引去相加(体现映射)
print(ll) # <map object at 0x000001C35C59E358>
print(list(ll)) # [5, 7, 9]...........#(形成的还是一个新列表)

5,递归:自己调用自己,就是递归(神一样的存在,一个包子饿了,把自己给吃了)

def func(count):
print("神一样的存在" + str(count))
func(count + 1)
func(1) # 相当与一个死循环,但是Python中最大递归997 # example:
import sys
sys.setrecursionlimit(10000) # 设置递归权限在10000以内
def func(count):
print("神一样的存在" + str(count))
func(count + 1)
func(1) # 打印结果:3222
  • 递归可以应用在:各种树形结构,文件夹系统,可以使用递归来遍历.(多用于一分二.二分四,这种联系极强的个体之间.)
import os
filePath = "d:\帅爆太阳的男人\python\_workspace" # 获取文件的路径
def read(filePath): #
it = os.listdir(filePath) # 打开文件夹(用it这个变量去打开文件夹)
for el in it: # 把打开文件夹里的(文件/文件夹)遍历出来
fp = os.path.join(filePath, el) # 你需要打开每一个母文件夹里每一个子文件夹,但每一个 子文件夹的路径都不一样,
# 但是上一个文件夹遍历出来,加到母文件夹后,就是每一个子文件夹的路径
if os.path.isdir(fp): # 判断是文件夹还是文件(实质还是判断这个文件夹里边有没有文件,当此文件中还存在文件,则证明是一个文件夹)
print("\t"*n, el) # "\t"是缩进*n,找规律
read(fp, n+1) # 把文件的元素放到函数里边打开(递归的入口)
else:
print("\t"*n, el) # 直到判断打开都是文件为止,就不在进行操作(也是递归的界限和限制, 即递归的出口)
read(filePath, 0)

6,二分法:每次能排除掉一般的数据效率较高,但是用二分法必须是有序数列,无序则不好使.

  • 方法一:算法(实质是找到目标元素在列表的中的位置,并记录查找的次数)
lst = [11, 22, 33, 44, 55, 66, 77, 88, 99, 123, 234, 345, 456, 567, 678, 789, 1111]
n = 156 # 写出目标数
left = 0 # 找到最左边的位置0(把位置定好)
right = len(lst)-1 # 找到最有变的位置(len(lst-1))
count = 1 # count记录查找的次数
while left <= right: # 循环是因为要重复去二分查找目标元素
middle = (left + right)//2 # 这个中间值是时刻在变化的
if n > lst[middle]: # 判断目标元素是否大于中间位置的元素
left = middle + 1 # 如果目标元素大于中间位置的元素,则此时的中间元素变成左端的元素,然后再去求中间值
elif n < lst[middle]: # 否则如果目标元素小于中间元素
right = middle - 1 # 此时中间位置的元素向左移动一位
else:
print(count) # 否则就是直接找到了,记录总共查找了几次
print("找到了") # 提示找到了
print(middle) # 打印这个目标函数在列表中的位置
break # 此时要跳出循环
else:
print("不存在") # 此时列表中没有目标元素
  • 方法二:递归二分法
lst = [11, 22, 33, 44, 55, 66, 77, 88, 99, 123, 234, 345, 456, 567, 678, 789, 1111]
def binary_search(left, right, n): # 函数的定义
middle = (left + right) // 2 # middle是中间数,通过left和right算出来的
if left > right: # 当左边比右边大时,说明目标数没有在列表中
return -1 # 返回-1表示不存在lst中,也有停止函数调用的功能,(-1)表示和其他数据 的数据保持格式一致
if n > lst[middle]: # 如果目标数比中间数大,说明目标数没有在列表中
left = middle +1 # 此时的中间数向右移动一位,即left现在是中间数右移的的值
elif n <lst[middle]: # 如果目标数比中间值小,说明目标数在列表的左半部分
right = middle - 1 # 此时中间数向右左移动一位,right就变成了middle左移的值
else:
return middle # 要用return,不能用print,return有停止调用函数的功能
return binary_search(left, right, n) # 再次调用函数的时候,必须要用return,谁调用return就把值返回给谁
binary_search(left, right, n)
 

lamdba匿名函数 sored()函数 filter()函数 map函数() 递归函数的更多相关文章

  1. Python之路(第七篇)Python作用域、匿名函数、函数式编程、map函数、filter函数、reduce函数

    一.作用域 return 可以返回任意值例子 def test1(): print("test1") def test(): print("test") ret ...

  2. Python之路Python作用域、匿名函数、函数式编程、map函数、filter函数、reduce函数

    Python之路Python作用域.匿名函数.函数式编程.map函数.filter函数.reduce函数 一.作用域 return 可以返回任意值例子 def test1(): print(" ...

  3. Python3中高阶函数lambda,filter,map,reduce,zip的详细用法

    在Python里有五大高阶函数,他们分别是lambda()匿名函数,filter()筛选函数,map()函数,reduce()函数,zip()函数.下面就让我们来详细的了解一下这五种函数的具体用法吧. ...

  4. python内置函数lambda、filter、map、reduce

    lambda匿名函数 1.lambda只是一个表达式,函数体比def简单多. 2.lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去 3.lambda函数 ...

  5. 2018.8.15 python 中的sorted()、filter()、map()函数

    主要内容: 1.lambda匿名函数 2.sorted() 3.filter() 4.map() 5.递归函数 一. lambda匿名函数 为了解决一些简单的需求而设计的一句话函数 # 计算n的n次方 ...

  6. Python 内置函数 -- zip(), sorted(), filter()和map()

    内置函数1. zip() 打包(木桶效应)描述: zip() 函数用于将可迭代的对象作为参数, 将对象中对应的元素打包成一个个元组, 然后返回由这些元组组成的列表语法: zip([iterable, ...

  7. Python基础(reduce,filter,map函数)

    map函数: map函数特点:对可迭代对象中的每个元素进行相同的操作(例如每个元素+1等等) #————————————————map函数———————————————————— #对列表的各个元素实 ...

  8. filter与map函数

    ·filter()函数filter()函数包括两个参数,分别是function和list.该函数根据function参数返回的结果是否为真来过滤list参数中的项,最后返回一个新列表,如下例所示:&g ...

  9. filter、map函数的区别

    def even(num): if num%2==0: return True return False lis = [1,2,3,4,5,6,7,8,9] res = filter(even,lis ...

  10. lambda匿名函数,sorted排序,filter()筛选,map()映射

    一丶匿名函数 语法: 函数名 = lambda参数:返回值 # 普通的正常的函数 def func(n): return n * n ret = func(9) print(ret) # 匿名函数 a ...

随机推荐

  1. vue 改变插值方法

    Vue默认的插值是双大括号{{}}.但有时我们会有需求更改这个插值的形式. delimiters:['${','}']  //必须要用一个数组来接收,用逗号隔开.

  2. C++获取本机用于连接的IP地址

    最近写个程序需要获取本机用于连接的IP地址,经过很多的尝试后,最终使用的方法如下: 使用cmd命令    netstat  | findstr “192.168.6.66:3333” > D:\ ...

  3. C++ 指针形参和指针引用形参的原理分析

    C++ 函数的参数传递可以分为:值传递和引用传递. 两者的最大区别也很简单,如果该函数的参数只是读的话,值传递就可以满足.如果该函数的参数需要进行修改并返回的时候,就应该进行引用传递. C++指针作为 ...

  4. 集训第六周 矩阵快速幂 K题

    Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. F ...

  5. HDU 1564 找规律博弈

    题目大意是: 从n*n的方格角落的一个起点出发,每次移到上下左右一个未曾到达过的位置,谁不能走了谁就输了 想了好久都想不出,看了大神的题解 Orz了 果然博弈不是脑残的游戏啊... 这里从起点出发,将 ...

  6. hdu 1075

    #include<stdio.h> #include<string.h> #include<string> #include<iostream> #in ...

  7. vagrant的学习 之 基础学习

    vagrant的学习 之 基础学习 本文根据慕课网的视频教程练习,感谢慕课网! 慕课的参考文档地址:https://github.com/apanly/mooc/tree/master/vagrant ...

  8. mysql 之 Workbench的使用

    mysql 之 Workbench的使用 (1)简介 MySQL Workbench是一款专为MySQL设计的ER/数据库建模工具.它是著名的数据库设计工具DBDesigner4的继任者.你可以用My ...

  9. [bzoj4826][Hnoi2017]影魔_单调栈_主席树

    影魔 bzoj-4826 Hnoi-2017 题目大意:给定一个$n$个数的序列$a$,求满足一下情况的点对个数: 注释:$1\le n,m\le 2\cdot 10^5$,$1\le p1,p2\l ...

  10. hdu3756(三分)

    题意:三维坐标轴,有以原点为圆心,底面在xoy平面上,顶点在z轴上的圆锥,问圆锥的最小体积为多少才能完全覆盖空间里的所有点(n<=10000) 分析: 很容易想到转成二维问题,将其投影到xoz平 ...