Python字符串格式化与数据结构实战指南
1. Python字符串格式化与输入输出实战字符串格式化是Python编程中最基础也最常用的功能之一。在日常开发中我们经常需要将变量、表达式的结果嵌入到字符串中输出或者对用户输入的数据进行格式化处理。1.1 三种主流字符串格式化方法Python目前主要有三种字符串格式化方式各有其适用场景百分号(%)格式化最传统的格式化方法类似C语言的printfname 张三 age 25 print(我叫%s今年%d岁 % (name, age))str.format()方法Python 2.6引入的更灵活的格式化方式print(我叫{0}今年{1}岁.format(name, age))f-stringPython 3.6引入的最新格式化语法性能最好print(f我叫{name}今年{age}岁)提示在新项目中推荐使用f-string它不仅可读性高而且执行效率比前两种方式快约2-3倍。1.2 用户输入处理技巧处理用户输入时我们通常需要做以下几步# 基本输入 user_input input(请输入您的年龄) # 类型转换 try: age int(user_input) except ValueError: print(请输入有效的数字) # 输入验证 if not 0 age 120: print(年龄必须在0-120之间)实际开发中还需要注意对敏感信息(如密码)使用getpass模块隐藏输入对多语言输入考虑编码问题对批量输入可以使用循环处理2. 个人信息处理实战案例2.1 个人信息数据结构设计处理个人信息时合理的数据结构设计非常重要。以下是几种常见方案# 方案1字典存储 person { name: 李四, age: 30, email: lisiexample.com } # 方案2类实例 class Person: def __init__(self, name, age, email): self.name name self.age age self.email email # 方案3命名元组 from collections import namedtuple Person namedtuple(Person, [name, age, email])2.2 个人信息验证与清洗收集到的个人信息通常需要验证和清洗def clean_person_data(data): # 去除前后空格 data[name] data[name].strip() # 邮箱格式验证 if not in data[email]: raise ValueError(无效的邮箱格式) # 年龄范围检查 data[age] int(data[age]) if data[age] 0: data[age] 0 return data3. 列表操作深度解析3.1 列表创建与基本操作列表是Python中最灵活的序列类型支持多种创建方式# 直接创建 numbers [1, 2, 3, 4, 5] # 使用生成式 squares [x**2 for x in range(10)] # 通过构造函数 chars list(hello)常用操作时间复杂度索引访问O(1)追加元素O(1)插入元素O(n)删除元素O(n)3.2 列表高级技巧切片操作nums [0, 1, 2, 3, 4, 5] print(nums[1:4]) # [1, 2, 3] print(nums[::2]) # 步长为2 [0, 2, 4]列表合并性能对比# 方式1运算符创建新列表 result list1 list2 # 方式2extend方法原地修改 list1.extend(list2) # 方式3解包Python 3.5 result [*list1, *list2]注意处理大型列表时extend()方法性能最好因为它不会创建中间列表。4. 元组特性与应用场景4.1 元组不可变性的本质元组的不可变性是指元组对象的标识内存地址和内容不可变但若元组包含可变对象这些对象自身是可以改变的t (1, 2, [3, 4]) t[2][0] 5 # 合法修改的是列表内容 # t[0] 10 # 非法尝试修改元组元素4.2 元组的性能优势元组在以下场景比列表更有优势作为字典的键因为不可变函数返回多个值时保证数据不被意外修改内存占用更小同样元素比列表少约20%内存import sys lst [1, 2, 3] tup (1, 2, 3) print(sys.getsizeof(lst)) # 一般为88字节 print(sys.getsizeof(tup)) # 一般为72字节5. 综合应用案例5.1 个人信息管理系统实现下面是一个简单的个人信息管理系统实现class PersonManager: def __init__(self): self.people [] def add_person(self, name, age, email): 添加个人信息 if not all([name, age, email]): raise ValueError(所有字段都必须填写) person { name: name.strip(), age: int(age), email: email.lower().strip() } self.people.append(person) def search(self, name): 搜索个人信息 return [p for p in self.people if name.lower() in p[name].lower()] def remove(self, email): 删除个人信息 self.people [p for p in self.people if p[email] ! email] def display_all(self): 显示所有信息 for i, person in enumerate(self.people, 1): print(f{i}. 姓名:{person[name]} 年龄:{person[age]} 邮箱:{person[email]})5.2 性能优化技巧批量操作处理大量数据时尽量使用生成器表达式而非列表推导式适当使用元组不需要修改的数据集合使用元组存储预分配列表空间已知列表大小时可预分配空间# 不好的做法 result [] for i in range(10000): result.append(i) # 更好的做法 result [0] * 10000 for i in range(10000): result[i] i在实际项目中我经常遇到需要处理大量用户数据的场景。一个重要的经验是对于只读的数据尽量使用元组而不是列表这不仅能保证数据安全还能提高程序运行效率。另外在处理用户输入时一定要做好数据验证和清理工作否则很容易出现各种边界问题。