一. lambda()
a = lambda n: n ** 2
a = lambda x, y: (x, y)
a = lambda x, y: x, y 这个需要两个变量名来接收, 把y赋值给第二个变量名
fn = lambda *args: max(args)
lambda有返回值
二. sorted()
sorted(iterable, key, reverse)
lst = sorted(lis, key = lambda el: el[:2], reverse = True)
lst = sorted(lis, key = func, reverse = True) func不加括号
sorted函数会把lis的每一个元素交给key, 然后计算出这个元素的权重, 整个函数按权重进行排序, sorted有返回值
三. filter()
filter(function, iteraable)
f = filter(lambda el: int(el[0]) < 5, lst)
print(list(f))
filter函数返回True的都会保留, False都会去除
获取的返回值是一个迭代器
m = map(func1, map(func2, map(func3, lst))) # 分而治之
m = map(lambda x, y, z: x + y + z, [1,2,3,4,5,6], [1,2,3,4,5], [1,2,3,4]) # 返回的迭代器的元素个数取最短的那个列表的个数
四. map()
map(function, iterable)
把可迭代对象中的每一个元素交给前面的函数进行执行, 返回值就是map的处理结果
m = map(lambda el: el ** 2, lst)
print(list(m))
返回的也是迭代器
五. repr()
print(repr('你好')) # '你好' 程序中内部存储的内容, 是给程序员看的
print('你好') # 你好 给用户看的
print(r'\\你好') # \\你好 原样输出
六. 递归
递归深度默认是1000, 可以改变, 但实际只能到998左右, 看机器好坏, 到了深度会报错
遍历 D:/sylar文件夹, 打印出所有的文件和普通文件的文件名
import os
def func(filepath, n): # d:/sylar/
# 1,打开这个文件夹
files = os.listdir(filepath)
# 2. 拿到每一个文件名
for file in files: # 文件名
# 3. 获取到路径
f_d = os.path.join(filepath, file) # d:/sylar/文件名/
# 4. 判断是否是文件夹
if os.path.isdir(f_d):
# 5. 如果是文件夹. 继续再来一遍
print("\t"*n, file,":") # 打印文件名
func(f_d, n + 1)
else: # 不是文件夹. 普通文件
print("\t"*n, file)
func("d:/sylar",0)
七. 二分法
核心: 切头去尾取中间, 一次砍一半
两种算法: 常规循环, 递归循环
# 递归来完成二分法
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) # 递归 递归的入口
elif n < lst[mid]:
right = mid - 1
# 深坑. 函数的返回值返回给调用者
return func(n, left, right) # 递归
elif n == lst[mid]:
print("找到了")
return mid
# return # 通过return返回. 终止递归
else:
print("没有这个数") # 递归的出口
return -1 # 1, 索引+ 2, 什么都不返回, None
# 找66, 左边界:0, 右边界是:len(lst) - 1
ret = func(66, 0, len(lst) - 1)
print(ret) # 不是None
时间复杂度, 空间复杂度最低的查找方法
lst1 = [5,6,7,8]
lst2 = [0,0,0,0,0,1,1,1,1] # 个数是lst1中最大的元素加1
for el in lst1:
lst2[el] = 1
print(lst2[5])