今日主要内容:
1. lambda 匿名函数
lambda 参数: 返回值
-------------------------------------
def square(x):
return x**2 ret = square
print(ret)
-------------------------------------
zrf = lambda x : x**2 #匿名函数 lambda 参数: 返回值
print(zrf)
ret = zrf(10)
print(ret) -------------------------------------
#给函数传递两个参数a,b 返回a+b的结果
s = lambda a, b: a + b ret = s(3, 7)
print(ret) ----------------难题---------------------
def add(a, b):
return a + b
def test():
for r_i in range(4):
yield r_i
g = test()
for n in [3, 8]:
g = (add(n, i) for i in g) #在未被调用时只记录公式,被调用时套入公式, g = 8
n = 6
print(list(g))
def num():
return [lambda x: x + i for i in range(4)] #闭包. i在循环中没被调用,只记录公式,当函数调用时,i=3,x+i 共循环4次,所有公式中i都等于3 print([i(2) for i in num()])

2. sorted 排序
sorted(Iterable, key=None, reverse=False) #可迭代对象后面两个默认值
sorted(可迭代对象,key=函数,是否倒序)
sorted流程:把可迭代对象的每一个元素传递给函数,函数返回一个数字,根据数字进行排序
-------------------------------------
lst = [1, 2, 22. 5, 10, 92, 88]
lst2 = sorted(lst) #排序功能
lst3 = sorted(lst, reverse=True)
print(lst2)
-------------------------------------
lst = ['王昭君', '李白', '司马懿', '大乔', '诸葛亮', '周瑜']
def func(name):
return len(name) l1 = sorted(lst, key=func)
print(l1) a = lambda name: len(name)
l1 = sorted(lst, key=a)
print(l1) l1 = sorted(lst,key=lambda name: len(name))
print(l1)
-------------------------------------
lst = [{"id": 1, "name": 'alex', "age": 18},
{"id": 2, "name": 'wusir', "age": 16},
{"id": 3, "name": 'taibai', "age": 17}]
# 按照年龄对学⽣信息进⾏排序
# def func(info):
return info["age"] # l1 = sorted(lst, key=func)
# print(l1)
l1 = sorted(lst, key= lambda info: info['age'])
print(l1)
-------------------------------------
#按照姓名首字母排序
lst = [{"id": 1, "name": 'alex', "age": 18},
{"id": 2, "name": 'wusir', "age": 16},
{"id": 3, "name": 'taibai', "age": 17}] l2 = sorted(lst, key=lambda dic: ascii(dic['name'][0]))
print(l2) l3 = sorted(lst, key=lambda dic: ord(dic['name'][0]))
print(l3) -------------------------------------
3. filter 筛选
filter(函数,可迭代对象)
执行流程:
把可迭代对象中的每一个元素拿出来, 放到func中运行.返回True/False. 根据返回的True和False来决定这个数据是否保留
#保留列表中大于18的数
lst = [22, 25, 12, 16, 28]
f = filter(lambda age: age > 18, lst)
for el in f:
print(el)
print(list(f))
print(sorted(f)) #对结果排序 #筛选年龄大于18且为偶数的年龄
lst = [23, 28, 16, 17, 22, 24]
f = filter(lambda age: age > 18 and age % 2 == 0, lst) # f是可迭代对象
print(list(f))
f2 = filter(lambda age: age % 2 == 0, filter(lambda age: age>18, lst))
print(list(f2))
-------------------------------------
#筛选年龄大于18且为偶数,并排序
lst = [22, 25, 12, 16, 28]
print(list(sorted(filter(lambda age: age % 2 == 0,filter(lambda age: age > 18, lst)))))
4. map 映射
map(函数,可迭代对象) #结构和filter一样,但可以返回值
执行流程:
把可迭代对象中的每一个元素拿出来, 放到func中运行.返回数据就是结果
lst = [2, 3, 7]
m = map(lambda x: x**2, lst)
print(list(m))
--------------------------------
#求lst1 和lst2中相同索引的数字和组成的列表
lst1 = [1, 2, 3, 4, 5]
lst2 = [2, 3, 4, 5, 6]
print(list(map(lambda x, y: x + y,lst1, lst2))) 5. 递归(难点)
优点:简单易写,用于遍历树形结构
缺点:资源消耗大,效率低,需要不停调用函数,开辟空间 自己调用自己
递归的入口
递归的出口: return
递归的循环条件:动
循环树形结构: def func():
print('你好啊')
func() #递归的入口 func() #调用函数
-----------------------------------
# 用递归实现1-100:
def func(index):
print(index)
if index == 100: return
func(index + 1) func(1)
-----------------------------------
def func(index):
print(index) #占用1个空间
func(index + 1) func(1) #占用1个空间
#递归深度1000,但是实际到不了1000, 在997-998之间
-----------------------------------
import sys
sys.setrecursionlimit(5000) #设置递归的最大深度,一般不要改
def func(index):
print(index) #占用1个空间
func(index + 1) func(1) #占用1个空间 打印路径下所有文件名:
打印路径下的所有文件名
import os
def func(file_path, layer):
lst = os.listdir(file_path)
for file in lst:
full_path = os.path.join(file_path, file)
if os.path.isdir(full_path):
print('\t'*layer, file)
func(full_path, layer + 1)
else:
print('\t'*layer, file)
else:
return
func('D:\python_work', 0)

6. 二分法查找

    优点:查找效率高
缺点:必须是有序序列 用二分法判断数字是否在列表中:
#判断输入的数字是否在列表中
lst = [1, 8, 16, 32, 55, 78, 425, 21, 5, 52, 11]
lst = sorted(lst) #必须是有序数列
n = int(input('请输入一个数:'))
left = 0
right = len(lst) - 1 while left <= right:
mid = (left + right) // 2 #索引只能是整数
if n > lst[mid]:
left = mid + 1
elif n < lst[mid]:
right = mid - 1
else:
print('在列表中,位置是%s' % mid)
break
else:
print('这个数不在此列表中')

用递归法查找数字是否在列表中,方法一:

def func(n, lst):
left = 0
right = len(lst) - 1
if left <= right:
mid = (left + right) // 2
if n < lst[mid]:
new_list = lst[:mid]
return func(n, new_list)
elif n > lst[mid]:
new_list = lst[mid + 1:]
return func(n, new_list)
else:
print('在列表中')
return True
else:
print('不在列表中')
return False lst = [1, 8, 16, 32, 55, 78, 425, 21, 5, 52, 11]
lst = sorted(lst)
ret = func(8, lst)
print(ret)

用递归法判断数字是否在列表中,方法二:

def func(n, lst, left=0, right=None):
if right == None:
right = len(lst) - 1
if left <= right:
mid = (left + right) //2
if n < lst[mid]:
right = mid - 1
elif n > lst[mid]:
left = mid + 1
else:
return True
return func(n, lst, left, right)
else:
return False lst = [1, 1, 1, 1, 2, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 7, 8, 8, 9, 16, 32, 44, 55, 78, 89]
ret = func(0,lst)
print(ret)

Day14--Python--函数二,lambda,sorted,filter,map,递归,二分法的更多相关文章

  1. python之内置函数(lambda,sorted,filter,map),递归,二分法

    一.lambda匿名函数 为了解决一些简单需求而设计的一句话函数,lambda表示的是匿名函数,不需要用def来声明,一句话就可以声明出一个函数. 语法: 函数名 = lambda 参数 : 返回值 ...

  2. lambda,sorted(),filter(),map(),递归,二分法

    1. lambda 匿名函数 语法: lambda 参数:返回值 不能完成复杂的操作例 # li=['21','asdd','weqeqw','wqf']# # it=iter(li)# # prin ...

  3. 内置函数 lambda sorted filter map 递归

    一 lambda 匿名函数 为了解决一些简单的需求而设计的一句话函数 # 计算 n 的 n次方 def func(n): return n**n print(func(10)) f = lambda ...

  4. python基础之lambda,sort,filter,map,递归函数的运用

    内容梗概:1. lamda 匿名函数2. sorted()3. filter()4. map()5. 递归函数 1.lambda 形式: lambda 参数:返回值 f = lambda x,y: x ...

  5. Python【day 14-4】sorted filter map+递归文件夹+二分法查找

    def func(x): #普通函数 return x*x ret1 = func(10) #匿名函数 f = lambda x:x*x # 匿名函数写法: 匿名函数名=lambda 参数:返回值 ' ...

  6. Python_Mix*匿名函数,sorted,filter,map,递归函数,二分法查找

    lambda匿名函数(函数名统一都叫lambda) 为了解决简单的需求而设计的一句话函数 语法: lambda 参数 返回值 n = lambda a,b: max(a,b) ret = n(9,4) ...

  7. 小学生都能学会的python(<lamda匿名函数,sorted(),filter(),map(),递归函数>)

    小学生都能学会的python(<<lamda匿名函数,sorted(),filter(),map(),递归函数,二分法>> 1. lambda 匿名函数 lambda 参数: ...

  8. 内置函数二(lambda函数,sorted(),filter(),map(),递归函数,二分法查找)

    一,匿名函数 lambda表⽰示的是匿名函数. 不需要⽤用def来声明, ⼀一句句话就可以声明出⼀一个函数 语法:    函数名 = lambda 参数: 返回值 注意: 1. 函数的参数可以有多个. ...

  9. python几个重要的函数(lambda,filter,reduce,map,zip)

    一.匿名函数lambda lambda argument1,argument2,...argumentN :expression using arguments 1.lambda是一个表达式,而不是一 ...

随机推荐

  1. drf开发中常见问题

    开发常见问题及解决 问题: 一.本地系统不能重现的bug 二.api接口出错不能及时的发现或难找到错误栈 三.api文档管理问题 四.大量的url配置造成url配置越来越多难以维护 五.接口不及时去更 ...

  2. FTC诉高通垄断案苹果从中受益

    据外媒报道,美国当地时间周二,美国联邦贸易委员会(FTC)诉芯片制造商高通公司(Qualcomm)垄断案进入了终结辩论阶段.这意味着,这起审判也进入最后阶段,它可能颠覆高通在智能手机时代取得成功的至关 ...

  3. ubuntu系统备份与恢复-remastersys方法

    http://blog.csdn.net/yaoqi_isee/article/details/73730010 http://blog.csdn.net/handsome_sheng/article ...

  4. CentOS 安装git

    git安装 yum install git 初始化git “git init --bare 文件夹” 添加所有 “git add . ” 提交 “git commit -m "提交信息&qu ...

  5. HTML5-SVG-基础篇

    什么是SVG? SVG 指可伸缩矢量图形 (Scalable Vector Graphics) SVG 用于定义用于网络的基于矢量的图形 SVG 使用 XML 格式定义图形 SVG 图像在放大或改变尺 ...

  6. 添加一个Android框架层的系统服务与实现服务的回调

    2017-10-09 概述 所谓Android系统服务其本质就是一个通过AIDL跨进程通信的小Demo的延伸而已.按照 AIDL 跨进程通信的标准创建一套程序,将服务端通过系统进程来运行实现永驻内存, ...

  7. Typecho——数据库无法连接问题

    报错 对不起,无法连接数据库,请先检查数据库配置再继续进行安装 解决方案 创建数据库 reate database databaseName; 远程权限 开启远程权限 GRANT ALL PRIVIL ...

  8. Lambda 动态表达式(排序)

    网上看到的: class Program { static List<User> list = new List<User>() { new User(){ID=1,Name= ...

  9. 字符串哈希及KMP

    字符串很神奇,因为它在计算机中应用很广泛,就每一个程序都需要用到字符串,所以学好字符串是非常重要的. 接下来就介绍两个字符串的基本操作 1:字符串hash  一种可以查找几个字符串有几个不同的字符串. ...

  10. 【ARC072E】Alice in linear land DP

    题目大意 有一个人要去直线上\(lm\)远处的地方,他会依次给他的机器发出\(n\)个指令.第\(i\)个指令为\(d_i\).他的机器收到一个指令\(x\)后,如果向目的地方向前进\(xm\)后比当 ...