lambda 匿名函数
语法 lambda 参数;返回值
a = lambda n : n * n print(a) #n = 2 #4
s = lambda x,y:x,y print(s) #这个会报错,默认认为 x,y:x 是一对元组,y 没有传值,会报错 s = lambda x,y:(x,y) print(s) #用括号括起来说明这是一个整体,就ok
sorted() 排序函数
内置函数中提供了一个通用的排序方案
lst = ["聊斋", "西游记", "三国演义", "葫芦娃", "水浒传", "年轮", "亮剑"]
def func():
ruturn len(lst) % 2
li = sorted(lst,key = func)
print(li)
# 聊斋 三国演义 年轮 亮剑 西游记 葫芦娃 水浒传
lst = [
{'name':"汪峰","age":48},
{"name":"章子怡",'age':38},
{"name":"alex","age":39},
{"name":"wusir","age":32},
{"name":"赵一宁","age":28}
]
li = dorted(lst,key = lambda el : len(el['name']))
print(li)
#{'name': 'wusir', 'age': 32}, {'name': 'alex', 'age': 39},
# {'name': '章子怡', 'age': 38},
# {'name': '赵一宁', 'age': 28}, {'name': '汪峰', 'age': 48}]
filter() 筛选函数
lst = [
{"name":"汪峰", "score":48},
{"name":"章子怡", "score":39},
{"name":"赵一宁","score":97},
{"name":"石可心","score":90}
]
f = filter(lambda el : el['score'] < 60,lst)
print(list(f))
map
一句话,分而治之
map (func1,map(func2,map(func3,map)))
递归
递归函数有最大的深度是 1000,实际到 998 左右就会报错
可以调整最大的深度,import sys 但是不建议这样做
二分法
一句话 掐头去尾取中间
二分法使用场景 有序序列
lst = [22, 33, 44, 55, 66, 77, 88, 99, 101 ]
n - 66
left = 0
right = len(lst) - 1 #获取索引 索引从0 开始
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('找到了')
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:
print('哈哈')
mid = (left + right)// 2
if n > lst[mid]:
left = mid + 1
return func(n,left,right)
if n <lst[mid]:
right = right + 1
return func(n,left,right)
if n ==lst[mid]:
print('找到了')
return mid
else:
prinit('没有这个数')
return -1
ret = func(66,0,len(lst) - 1)
print(ret)
来源:https://www.cnblogs.com/lzqrkn/p/9482310.html