摘要

本文重点讲解 Python 常用内置函数与编程技巧:匿名函数 lambda、排序 sorted()、过滤 filter()、映射 map()、递归函数以及经典算法 —— 二分查找。内容附带完整可运行代码示例,适合入门与复习。


目录

  1. lambda 匿名函数

  2. sorted () 排序

  3. filter () 过滤

  4. map () 映射

  5. 递归函数

  6. 二分查找


一、lambda 匿名函数

一句话函数,简单场景用。

语法

函数名 = lambda 参数: 返回值

示例

# 普通函数
def func(n):
    return n ** n
​
print(func(10))
​
# lambda 匿名函数
f = lambda n: n ** n
print(f(10))

特点

  • 参数可以多个,逗号隔开

  • 只能一行,直接返回结果

  • 返回值任意类型

  • __name__ 显示为 lambda


二、sorted () 排序

不改变原序列,返回新序列。

语法

sorted(Iterable, key=None, reverse=False)

示例

lst = [1, 5, 3, 4, 6]
lst2 = sorted(lst)
print(lst)   # 原列表不变
print(lst2)

字典排序

dic = {1:'A', 3:'C', 2:'B'}
print(sorted(dic))  # 排序 key

按长度排序(lambda)

lst = ["麻花藤", "冈本次郎", "中央情报局", "狐仙"]
print(sorted(lst, key=lambda s: len(s)))

按年龄排序

lst = [
    {"id": 1, "name": "alex", "age": 18},
    {"id": 2, "name": "wusir", "age": 16},
    {"id": 3, "name": "taibai", "age": 17}
]
​
print(sorted(lst, key=lambda e: e["age"]))

三、filter () 过滤

保留 True 的元素。

语法

filter(function, Iterable)

示例:过滤偶数

lst = [1, 2, 3, 4, 5, 6, 7]
ll = filter(lambda x: x % 2 == 0, lst)
print(list(ll))

示例:年龄大于 16

lst = [
    {"id": 1, "name": "alex", "age": 18},
    {"id": 2, "name": "wusir", "age": 16},
    {"id": 3, "name": "taibai", "age": 17}
]

fl = filter(lambda e: e["age"] > 16, lst)
print(list(fl))

四、map () 映射

对每个元素做统一处理。

语法

map(function, Iterable)

示例:平方

mp = map(lambda x: x * x, [1, 2, 3, 4, 5])
print(list(mp))

示例:两列表相加

lst1 = [1, 2, 3, 4, 5]
lst2 = [2, 4, 6, 8, 10]

res = map(lambda x, y: x + y, lst1, lst2)
print(list(res))

五、递归函数

函数内部调用自己。

示例(死递归)

def func():
    print("我是谁")
    func()

# func()  # 运行会报错:递归深度超限

递归深度

Python 默认最大递归深度:998

递归遍历文件夹

import os

def read(filepath, n=0):
    files = os.listdir(filepath)
    for fi in files:
        fi_d = os.path.join(filepath, fi)
        if os.path.isdir(fi_d):
            print("t" * n, fi)
            read(fi_d, n + 1)
        else:
            print("t" * n, fi)

# read("../oldboy/", 0)

六、二分查找

有序序列,每次排除一半,效率极高。

非递归

lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789]
n = 567

left = 0
right = len(lst) - 1
count = 1

while left <= right:
    middle = (left + right) // 2
    if n < lst[middle]:
        right = middle - 1
    elif n > lst[middle]:
        left = middle + 1
    else:
        print("次数:", count)
        print("位置:", middle)
        break
    count += 1
else:
    print("不存在")

递归版本

lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789]

def binary_search(n, left, right):
    if left <= right:
        middle = (left + right) // 2
        if n < lst[middle]:
            return binary_search(n, left, middle - 1)
        elif n > lst[middle]:
            return binary_search(n, middle + 1, right)
        else:
            return middle
    else:
        return -1

print(binary_search(567, 0, len(lst)-1))

总结(表格)

函数 / 概念作用特点
lambda匿名函数一行、简单、无独立名称
sorted()排序不改变原列表,key 自定义规则
filter()过滤保留 True,返回迭代器
map()映射批量处理每个元素
递归自己调用自己适合树形 / 目录遍历,有深度限制
二分查找快速查找必须有序,效率高:O (log n)

 

 

更多推荐