摘要:在 Python 中,获取对象的长度(元素个数)是最常见的操作之一。无论是字符串的字符数、列表的元素数量,还是字典的键值对数,都可以通过 len 来完成。作为最常用的内置函数之一,len 背后依赖对象的特殊方法 __len__,因此也支持用户自定义类型的扩展。
在 Python 中,获取对象的长度(元素个数)是最常见的操作之一。无论是字符串的字符数、列表的元素数量,还是字典的键值对数,都可以通过 len 来完成。作为最常用的内置函数之一,len 背后依赖对象的特殊方法 __len__,因此也支持用户自定义类型的扩展。
一、函数语法
len(obj)参数:
obj:必填。一个支持长度计算的对象(实现了 __len__ 方法)。常见类型包括字符串、列表、元组、字典、集合、range、bytes 等。
返回值:
返回一个整数,表示对象中元素的数量。
二、基础用法举例
1、字符串长度
print(len("Python")) # 62、列表长度
nums = [1, 2, 3, 4]print(len(nums)) # 43、字典长度(键值对数)
d = {"a": 1, "b": 2, "c": 3}print(len(d)) # 34、集合长度(去重后元素个数)
s = {1, 2, 2, 3}print(len(s)) # 35、结合 创建数字列表
data = ["apple", "banana", "cherry"]# 用 len 获取长度,再用 range 生成索引列表nums = list(range(len(data)))print(nums) # 输出:[0, 1, 2]三、len 特点
1、依赖 __len__ 方法
len(obj) 的本质调用是 obj.__len__。
所以自定义类只要实现 __len__,就能支持 len。
2、支持内置可迭代容器
如 str、list、tuple、dict、set、frozenset、range、bytes、bytearray 等。
3、返回值保证非负
__len__ 必须返回一个非负整数,否则会触发 TypeError 或 ValueError。
四、进阶技巧
1、结合条件判断
nums = list(range(5))if len(nums) > 0:print("列表非空")更 Pythonic 的写法是:
if nums: # 直接利用布尔判断print("列表非空")2、处理嵌套对象
matrix = [[1, 2], [3, 4], [5, 6]]print(len(matrix)) # 3,外层列表长度print(len(matrix[0])) # 2,内层列表长度3、用在或结果上
print(len(range(10))) # 10注意:对生成器(如 (x for x in range(10)))直接调用 len 会报错,因为生成器没有 __len__ 方法。
4. 自定义类中实现 __len__
class Box:def __init__(self, *items):self.items = list(items)def __len__(self):return len(self.items)b = Box("apple", "banana")print(len(b)) # 2五、补充说明
1、与布尔判断的关系
if obj: 在布尔上下文中会先尝试 __len__,长度为 0 时结果为 False。
2、与空对象的关系
len() == 0,len("") == 0,len({}) == 0,都表示空容器。
3、性能考虑
对内置容器而言,len 的时间复杂度是 O(1),因为长度在对象内部保存,不需遍历。
小结
len 是 Python 最常用的内置函数之一,能快速返回对象的长度。它适用于几乎所有内置容器,也支持用户自定义对象。理解其与 __len__ 的关系,有助于灵活扩展类的行为,并掌握 Python 判断对象“空/非空”的底层逻辑。
“点赞有美意,赞赏是鼓励”
来源:秀丽教育