len() 函数是 Python 程序员用来检查数据的首选工具之一。如果您正在学习我们的 Introduction to Python for Developers 课程或 Python Programming Fundamentals 技能路径,您一定见过 len()。
在本文中,我将向您展示 len() 在 Python 中如何作用于各种常见数据类型,并提醒您在出错时需要注意什么。
Python 的 len() 函数做什么?
每当您需要检查某个对象包含多少项时,都可以使用 Python 内置的 len() 函数。我这里说的是统计列表中的元素数量,或统计字符串中的字符数。您也可以用它来统计字典中的键数。用途非常广泛。
最基本的用法如下:
len(object)技术支持
只需把您想要测量的对象(如上面列举的那些)放在 object 的位置即可。
在常见 Python 数据类型上使用 len()
我上面列出了一些常见用例,但都比较抽象。下面通过具体示例来直观展示使用 len() 的价值。
统计字符串中的字符数
假设您想知道一段文本的精确长度,包括所有空格和标点符号:
word = "Josef"
print(len(word))技术支持
这将打印 5,因为单词 "Josef"(以 "f" 结尾)由五个字符组成。
检查列表中的项目数量
如果您想知道列表包含多少项,可以这样用:
numbers = [10, 20, 30, 40, 50]
print(len(numbers))技术支持
输出将是 5。
获取元组的大小
元组与列表类似,都用于将项目分组,但元组是不可变的,创建后无法更改。len() 在这里同样适用:
dimensions = (1920, 1080)
print(len(dimensions))技术支持
这会得到 2,因为该元组存储了两个元素。
统计字典中的键数
Python 字典由键值对构成。当您对字典使用 len() 时,它只统计键的数量:
person = {"name": "Alice", "age": 30, "city": "Paris"}
print(len(person))技术支持
因此您会得到 3(每个键各算一个)。
检查集合中的唯一元素数
当您只想存储唯一项时,集合很有用。len() 会告诉您结果:
colors = {"red", "green", "blue", "red"}
print(len(colors))技术支持
这会返回 3,因为 "red" 出现了两次但只计算一次。
len() 的底层工作原理
您可能和我一样好奇,len() 实际上如何确定大小。
在底层,当您对某个对象调用 len() 时,Python 会查找该对象的 __len__ 方法。内置类型如列表、字符串和字典都实现了这个方法。
了解这一点意味着,如果我们创建自己的类并希望 len() 适用于它,就必须自行定义一个 __len__ 方法:
class Box:
def __init__(self, items):
self.items = items
def __len__(self):
return len(self.items)
my_box = Box(["apple", "banana", "orange"])
print(len(my_box))技术支持
这里,len() 返回 3,因为这个盒子装了三个物品。就像对列表和字符串所做的那样,只要对象提供了 __len__ 方法,len() 就能适配。
当 len() 不起作用时会发生什么?
当然,并非所有 Python 对象都有长度。如果您尝试在不支持的对象上使用 len()(稍后我会用 int 数据类型演示),Python 会抛出 TypeError。这很常见,尤其在处理混合数据类型时。例如:
num = 42
print(len(num))技术支持
这会触发如下错误:
TypeError: object of type 'int' has no len()技术支持
每当您看到这种错误,请再次确认您要测量的对象实际上是容器或序列(字符串、列表或字典),而不是整数或浮点数这类单个值。
一些实用的 len() 用法
我们把例子提升到更贴近真实编程场景的程度。
结合 range 进行循环
当您需要按索引遍历列表时,len() 可以帮助您设置合适的循环范围:
fruits = ["apple", "banana", "cherry"]
for i in range(len(fruits)):
print(f"Index {i}: {fruits[i]}")技术支持
这会打印每个水果及其索引,同时给出顺序与上下文。
Index 0: apple
Index 1: banana
Index 2: cherry技术支持
检查容器是否为空
很多时候,您会在继续处理前想知道容器(如列表或字典)是否为空:
cart = []
if len(cart) == 0:
print("Your shopping cart is empty.")技术支持
这种模式可帮助您在没有可处理内容时避免错误或不必要的计算。
截断过长的字符串
处理用户输入或显示标签时,您可能希望限制字符串长度。len() 能帮助您实施这些限制:
username = "superlongusername"
if len(username) > 10:
username = username[:10]
print(username)技术支持
这里,任何长度超过 10 个字符的用户名都会被裁剪。
len() 的常见误区
len() 即使对有一定 Python 经验的人也可能造成困扰:
-
尝试对整数或浮点数使用 len():数字不是集合,没有长度。
-
忽略了 len() 统计的是“项”,不是“值”:在字典中,len 统计的是键的数量——即使多个键指向同一个值。
-
以为 len() 对所有对象都适用:自定义类需要实现 __len__ 方法,否则 len() 不知道如何处理。
记住这些规则,可以为您节省调试时间。
使用 len() 的错误处理
鉴于误用 len() 可能会引发 TypeError,在处理不可预知数据时,预先为此做好准备是明智的。try-except 代码块是优雅处理此类错误的简单方式:
data = 123
try:
print(len(data))
except TypeError:
print("Object has no length.")技术支持
程序不会崩溃,而是打印一条友好的提示。想要熟练掌握这类技巧,我们的 Object-Oriented Programming in Python 课程是很好的资源。
在自定义类中使用 len()
回到自定义类。自定义类是指您使用 class 关键字自行定义的任何类——比如在程序中建模某个特定对象,如 Team、Box 或 Library。前面您已经看到,len() 之所以能用于列表和字典等内置类型,是因为它们实现了一个名为 __len__() 的特殊方法。自定义类同样如此。如果您希望 len() 适用于它们,就需要自己定义 __len__()。
我并不是想用技术细节拖慢您的阅读节奏。我之所以强调这一点,是因为当您构建应当像 Python 原生集合那样行为的自定义数据容器时,这非常重要。支持 len() 能让您的对象更自然地融入 Python 生态,与其他函数和库良好协作。
下面是一个快速回顾:
class Team:
def __init__(self, players):
self.players = players
def __len__(self):
return len(self.players)
my_team = Team(["Alice", "Bob", "Cathy"])
print(len(my_team))技术支持
同样,len() 返回 3,这是正确的答案,因为您的队伍中有三名队员。
结语
下次当您需要在 Python 中计数、测量或验证某个对象的大小时,请记住 len() 是一个很好的选择。
不过既然已经读到最后,我还想提一件很重要的事。我们专注于一个函数,但在 Python 中几乎总有多种方法可以完成某个任务。我们有一篇文章展示了多种获取列表长度的方法,而 len() 只是其中一种:Python List Size: 8 Different Methods for Finding the Length of a List in Python。
持续练习新方法。这样一定能让您成为更强的程序员。别忘了报名我们的 Python Programming 技能路径,它将教您如何优化代码、编写函数与测试等等。
len()函数是 Python 程序员用来检查数据的首选工具之一。如果您正在学习我们的 Introduction to Python for Developers 课程或 Python Programming Fundamentals 技能路径,您一定见过len()。在本文中,我将向您展示
len()在 Python 中如何作用于各种常见数据类型,并提醒您在出错时需要注意什么。Python 的 len() 函数做什么?
每当您需要检查某个对象包含多少项时,都可以使用 Python 内置的
len()函数。我这里说的是统计列表中的元素数量,或统计字符串中的字符数。您也可以用它来统计字典中的键数。用途非常广泛。最基本的用法如下:
只需把您想要测量的对象(如上面列举的那些)放在
object的位置即可。在常见 Python 数据类型上使用 len()
我上面列出了一些常见用例,但都比较抽象。下面通过具体示例来直观展示使用
len()的价值。统计字符串中的字符数
假设您想知道一段文本的精确长度,包括所有空格和标点符号:
这将打印
5,因为单词"Josef"(以 "f" 结尾)由五个字符组成。检查列表中的项目数量
如果您想知道列表包含多少项,可以这样用:
输出将是
5。获取元组的大小
元组与列表类似,都用于将项目分组,但元组是不可变的,创建后无法更改。
len()在这里同样适用:这会得到
2,因为该元组存储了两个元素。统计字典中的键数
Python 字典由键值对构成。当您对字典使用
len()时,它只统计键的数量:因此您会得到
3(每个键各算一个)。检查集合中的唯一元素数
当您只想存储唯一项时,集合很有用。
len()会告诉您结果:这会返回
3,因为"red"出现了两次但只计算一次。len() 的底层工作原理
您可能和我一样好奇,
len()实际上如何确定大小。在底层,当您对某个对象调用
len()时,Python 会查找该对象的__len__方法。内置类型如列表、字符串和字典都实现了这个方法。了解这一点意味着,如果我们创建自己的类并希望
len()适用于它,就必须自行定义一个__len__方法:这里,
len()返回3,因为这个盒子装了三个物品。就像对列表和字符串所做的那样,只要对象提供了__len__方法,len()就能适配。当 len() 不起作用时会发生什么?
当然,并非所有 Python 对象都有长度。如果您尝试在不支持的对象上使用
len()(稍后我会用int数据类型演示),Python 会抛出TypeError。这很常见,尤其在处理混合数据类型时。例如:这会触发如下错误:
每当您看到这种错误,请再次确认您要测量的对象实际上是容器或序列(字符串、列表或字典),而不是整数或浮点数这类单个值。
一些实用的 len() 用法
我们把例子提升到更贴近真实编程场景的程度。
结合 range 进行循环
当您需要按索引遍历列表时,
len()可以帮助您设置合适的循环范围:这会打印每个水果及其索引,同时给出顺序与上下文。
检查容器是否为空
很多时候,您会在继续处理前想知道容器(如列表或字典)是否为空:
这种模式可帮助您在没有可处理内容时避免错误或不必要的计算。
截断过长的字符串
处理用户输入或显示标签时,您可能希望限制字符串长度。
len()能帮助您实施这些限制:这里,任何长度超过 10 个字符的用户名都会被裁剪。
len() 的常见误区
len()即使对有一定 Python 经验的人也可能造成困扰:尝试对整数或浮点数使用 len():数字不是集合,没有长度。
忽略了 len() 统计的是“项”,不是“值”:在字典中,len 统计的是键的数量——即使多个键指向同一个值。
以为 len() 对所有对象都适用:自定义类需要实现
__len__方法,否则len()不知道如何处理。记住这些规则,可以为您节省调试时间。
使用 len() 的错误处理
鉴于误用
len()可能会引发TypeError,在处理不可预知数据时,预先为此做好准备是明智的。try-except 代码块是优雅处理此类错误的简单方式:程序不会崩溃,而是打印一条友好的提示。想要熟练掌握这类技巧,我们的 Object-Oriented Programming in Python 课程是很好的资源。
在自定义类中使用 len()
回到自定义类。自定义类是指您使用
class关键字自行定义的任何类——比如在程序中建模某个特定对象,如Team、Box或Library。前面您已经看到,len()之所以能用于列表和字典等内置类型,是因为它们实现了一个名为__len__()的特殊方法。自定义类同样如此。如果您希望len()适用于它们,就需要自己定义__len__()。我并不是想用技术细节拖慢您的阅读节奏。我之所以强调这一点,是因为当您构建应当像 Python 原生集合那样行为的自定义数据容器时,这非常重要。支持
len()能让您的对象更自然地融入 Python 生态,与其他函数和库良好协作。下面是一个快速回顾:
同样,
len()返回3,这是正确的答案,因为您的队伍中有三名队员。结语
下次当您需要在 Python 中计数、测量或验证某个对象的大小时,请记住
len()是一个很好的选择。不过既然已经读到最后,我还想提一件很重要的事。我们专注于一个函数,但在 Python 中几乎总有多种方法可以完成某个任务。我们有一篇文章展示了多种获取列表长度的方法,而
len()只是其中一种:Python List Size: 8 Different Methods for Finding the Length of a List in Python。持续练习新方法。这样一定能让您成为更强的程序员。别忘了报名我们的 Python Programming 技能路径,它将教您如何优化代码、编写函数与测试等等。