len、map、filter是Python三大基础内置函数:len依赖__len__协议返回对象长度;map惰性执行一一对多转换;filter按布尔结果筛选元素,三者均不修改原数据且返回迭代器。
len、map、filter 是 Python 最常用也最基础的三个内建函数,掌握它们能大幅简化数据处理逻辑
。它们不修改原数据,返回新对象(多数情况下是迭代器),写法简洁但容易用错类型或忽略惰性求值特性。
len() 返回对象的长度,但它背后依赖的是 __len__ 魔术方法。只要一个类实现了该方法,就能用 len() 查长度。
__len__)——调用会报 TypeError
class MyContainer:
def __init__(self, items):
self.items = items
def __len__(self):
return len(self.items)
obj = MyContainer([1, 2, 3])
print(len(obj)) # 输出 3
map(func, iterable) 对可迭代对象中每个元素调用 func,并返回 map 对象(Python 3 中是惰性迭代器)。
map(str.upper, ['a', 'b']) → ['A', 'B'](需 list() 转换才看到结果)
map(pow, [2, 3, 4], [3, 2, 1]) → [8, 9, 4]
map(int, ['1', '2']) ❌ map(int(), ['1', '2'])
filter(func, iterable) 把 iterable 中每个元素传给 func,只保留 func 返回为 True 的元素。
filter(str.isdigit, 'a1b2c3') → ['1','2','3'];filter(int, [0, 1, '', 2]) → [1, 2](因为 int(0) 是 0 → False,int('') 报错,所以实际不能这么用)filter(lambda x: isinstance(x, str) and x.isdigit(), ['1', 'a', '2'])
这三个函数组合使用很常见,比如:list(map(int, filter(str.isdigit, 'abc123def45'))) → [1, 2, 3, 4, 5]
理解它们的输入输出类型、是否惰性、如何终止异常,比死记语法更重要。