1.匿名函数 lambda()
# 匿名函数
def func(n):
return n+1
# 匿名函数 lambda 参数: 返回值
a = lambda n: n+1
# 两个函数的执行效果是一样的
print(a(5))
print(func(5))
2.sorted()排序函数
sorted(iterable, key,reverse=False)
- iterable:可迭代对象
- key:排序方案,sorted函数会把可迭代对象中每个元素拿出来交给后面的key,后面的key计算出一个数字,按照这个数字进行排序,这个数字一般是一个函数的返回值
- reverse:是否倒序。默认False,不倒序
发现的有趣现象:
lst = ["黄永仙", "黄永三一", "张三", "王二麻子", "一一一一一一一"]
print(sorted(lst))
运行结果:
sorted函数和lambda函数的结合应用
# 按照年龄排序
person = [{"name": "HYG", "age": 27},
{"name": "WQ", "age": 26},
{"name": "HYGWQ", "age": 25}]
x = sorted(person, key=lambda el: el["age"])
print(x)
3、filter()筛选函数
和上面的sorted函数差不多,都是把可迭代的对象送进去,然后把每一项交给函数,最后按照函数的规则,过滤掉我们不想要的,
函数必须要返回True或者False,返回True的会被留下,反之被抛弃
# 不要姓黄的
lst = ["黄永刚", "黄飞鸿", "吴倩", "周超"]
def func(el):
if el[0] == "黄":
return False
else:
return True
x = filter(lambda el: el[0] != "黄", lst)
for i in x:
print(i)
执行结果
4、映射函数map()
这几个东西差不多,都是把可迭代的东西送进去,不一样的是,map是来处理这些数据,按照func中的算法
5、递归
1)、递归应用-遍历文件夹
# 文件夹遍历
import os
def func(filepath, n):
files = os.listdir(filepath) # 列出文件&文件夹列表
for file in files: # 取出每个文件
file_path = os.path.join(filepath, file) # 拼接成绝对路径
if os.path.isdir(file_path):
print("\t"*n, file, ":")
func(file_path, n+1) # 如果是文件夹,再调用func
else:
print("\t"*n, file)
func("E:\\一些工具", 0)
2)二分法查找:
-
二分法可以提高查找效率,特别是数据量也别巨大的时候,这个优势会非常明显,假设有n个数,2的x次方等于n,那我们只需要x次就能找到,如果用普通的算法去找,最多需要n次才能找到,优势可见一斑
-
条件:只能对有序的数列操作
-
大致思路:掐头去尾取中间,一次排除一半的数据
原始的二分法查找代码
lst = [11, 22, 33, 44, 55, 88, 92, 97, 125, 186, 258, 369, 456, 789, 987]
# 判断一个数在不在上述的列表中
n = 33
left = 0
right = len(lst) - 1
while left <= right:
mid = (left+right)//2
if lst[mid] == n:
print("找到啦!")
break
if lst[mid] > n:
right = mid - 1
if lst[mid] < n:
left = mid + 1
else:
print("没这个数")
用递归的思想完成二分法查找
lst = [11, 22, 33, 44, 55, 88, 92, 97, 125, 186, 258, 369, 456, 789, 987]
def func(n, left, right):
mid = (left+right)//2
if left <= right:
if lst[mid] > n:
right = mid - 1
return func(n, left, right) # 这里不加return的话,我们收到的return值是None
elif lst[mid] < n:
left = mid+1
return func(n, left, right) # 这里不加return的话,我们收到的return值是None
else:
print("find it!!")
return mid
else:
print("no such number")
return -1
print(func(187, 0, len(lst)))