网站首页 > 博客文章 正文
len()函数是Python中非常基础且重要的内置函数之一,用于返回对象的长度或元素个数。本文将全面详细地解析len()函数的各种用法和特性。
1. len()函数的基本用法
1.1 基本语法
len(object)
- object:可以是序列(如字符串、列表、元组等)或集合(如字典、集合等)
- 返回值:对象的长度(整数)
1.2 常见数据类型的长度计算
# 字符串
print(len("Hello")) # 输出: 5
# 列表
print(len([1, 2, 3, 4])) # 输出: 4
# 元组
print(len((1, 2, 3))) # 输出: 3
# 字典
print(len({"name": "Alice", "age": 25})) # 输出: 2
# 集合
print(len({1, 2, 3, 4, 5})) # 输出: 5
2. len()函数的详细解析
2.1 字符串长度计算
对于字符串,len()返回字符的个数(注意:对于多字节字符如中文也按1计算)
print(len("Python")) # 6
print(len("你好")) # 2
print(len("")) # 1 (表情符号也算作一个字符)
2.2 列表和元组长度
返回元素的数量:
fruits = ["apple", "banana", "cherry"]
print(len(fruits)) # 3
coordinates = (10.5, 20.3)
print(len(coordinates)) # 2
2.3 字典长度
返回键值对的数量:
person = {"name": "Bob", "age": 30, "city": "New York"}
print(len(person)) # 3
2.4 集合长度
返回唯一元素的数量:
unique_numbers = {1, 2, 2, 3, 3, 3}
print(len(unique_numbers)) # 3 (重复元素只计一次)
3. 特殊情况和注意事项
3.1 空容器的长度
print(len("")) # 0 (空字符串)
print(len([])) # 0 (空列表)
print(len({})) # 0 (空字典)
print(len(set())) # 0 (空集合)
3.2 不支持len()的对象
某些对象没有长度概念,调用len()会引发TypeError:
print(len("")) # 0 (空字符串)
print(len([])) # 0 (空列表)
print(len({})) # 0 (空字典)
print(len(set())) # 0 (空集合)
3.2 不支持len()的对象
某些对象没有长度概念,调用len()会引发TypeError:
class MyCollection:
def __init__(self, items):
self.items = items
def __len__(self):
return len(self.items)
my_col = MyCollection([1, 2, 3, 4, 5])
print(len(my_col)) # 5
4. len()函数的实际应用
4.1 检查容器是否为空
my_list = []
# 不好的写法
if len(my_list) == 0:
print("List is empty")
# Pythonic的写法
if not my_list:
print("List is empty")
4.2 循环中使用长度
fruits = ["apple", "banana", "cherry"]
for i in range(len(fruits)):
print(f"Fruit {i+1}: {fruits[i]}")
4.3 数据验证
username = input("Enter username: ")
while len(username) < 4:
print("Username must be at least 4 characters")
username = input("Enter username: ")
4.4 切片操作结合长度
text = "Hello, World!"
middle = len(text) // 2
print(text[:middle]) # 前半部分
print(text[middle:]) # 后半部分
5. 性能考虑
len()函数的时间复杂度:
- 列表、元组、字符串、集合:O(1) - 因为这些对象会存储自己的长度
- 字典:O(1) - 同样会存储键值对数量
- 自定义对象:取决于__len__()方法的实现
对于非常大的对象,len()仍然非常高效,因为Python不会真正遍历整个对象来计算长度。
6. 常见问题解答
6.1 len()计算的是字节数还是字符数?
对于字符串,len()计算的是Unicode字符数,不是字节数
print(len("你好")) # 2个字符
print(len("")) # 2个字符(虽然是表情符号)
要获取字节数,需要先编码:
print(len("你好".encode("utf-8"))) # 6个字节(UTF-8中每个中文3字节)
6.2 为什么len(dict)返回键的数量而不是值的数量?
因为字典的键是唯一的,而值可以重复。通常我们更关心有多少个唯一的键值对。
6.3 如何获取多维列表的长度?
对于多维列表,len()只返回第一维的长度:
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(len(matrix)) # 3 (外层列表长度)
print(len(matrix[0])) # 3 (第一个内层列表长度)
6.4 len()和size()有什么区别?
Python内置函数中没有size(),len()是标准的获取容器大小的函数。某些库(如NumPy)可能有size()方法,但这是库特定的。
7. 总结
len()函数是Python中极为常用的内置函数,主要特点包括:
- 适用于大多数容器类型(字符串、列表、元组、字典、集合等)
- 时间复杂度为O(1),非常高效
- 可以用于自定义对象(通过实现__len__()方法)
- 是检查容器是否为空的推荐方式
记住这些关键点:
- 对字符串返回字符数(不是字节数)
- 对字典返回键值对数量
- 空容器的长度为0
- 非容器对象会引发TypeError
掌握len()函数的使用,能够帮助你更有效地处理各种数据结构,编写更简洁、更Pythonic的代码。
- 上一篇: 用PLC的指针实现字符串转byte(Codesys平台)一文极简搞懂指针
- 下一篇:已经是最后一篇了
猜你喜欢
- 2025-08-02 用PLC的指针实现字符串转byte(Codesys平台)一文极简搞懂指针
- 2025-08-02 EXCEL如何用函数读取复杂字符串中的数据
- 2025-08-02 2025-07-19:计算字符串的镜像分数。用go语言,给定一个字符串 s
- 2025-08-02 2025-07-10:字符相同的最短子字符串Ⅰ。用go语言,给定一个长度
- 2024-08-13 「C语言初级」.字符串基本操作之一
- 2024-08-13 Golang: string vs []byte 高阶篇03
- 2024-08-13 本周第二题,模拟竖式计算,比较两个字符串的每一位。
- 2024-08-13 Python合集之Python字符串常用操作(一)
- 2024-08-13 C字符串搜索和替换算法(字符串的查找与替换)
- 2024-08-13 超简单的在线实时字数统计工具(字数统计工具app)
你 发表评论:
欢迎- 最近发表
-
- Python 中 必须掌握的 20 个核心函数—len()函数
- 用PLC的指针实现字符串转byte(Codesys平台)一文极简搞懂指针
- EXCEL如何用函数读取复杂字符串中的数据
- 2025-07-19:计算字符串的镜像分数。用go语言,给定一个字符串 s
- 2025-07-10:字符相同的最短子字符串Ⅰ。用go语言,给定一个长度
- 基于物理特征融合与机器学习的多井协同钻井速率实时预测与优化(
- [电子学报文章精选]一种基于特征融合的恶意代码快速检测方法
- 强大的可视化流程图编辑神器 — LogicFlow
- 前端框架太卷了!字节企业级框架Arco Design Mobile开源了
- Vue独立组件——11个最佳Vue.js日期选择器组件
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- flutterrun (59)
- powershellfor (73)
- messagesource (71)
- plsql64位 (73)
- vueproxytable (64)
- npminstallsave (63)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- nacos启动失败 (64)
- ssh-add (70)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- qcombobox样式表 (68)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)