案例4:代码重构——简化冗长的Python代码
2026-03-06 09:34 更新
案例4:代码重构——简化冗长的Python代码
需求描述
以下是一段冗长的Python代码,功能是计算两个列表的交集、并集、差集,代码存在冗余、可读性低的问题,请用Claude Code 优化这段代码,简化结构、提升可读性,保留核心功能,附带优化说明,同时添加异常处理(如输入非列表类型)。 冗长代码:
list1 = [1, 2, 3, 4, 5]
list2 = [4, 5, 6, 7, 8]
## 计算交集
intersection = []
for num in list1:
if num in list2:
if num not in intersection:
intersection.append(num)
## 计算并集
union = []
for num in list1:
if num not in union:
union.append(num)
for num in list2:
if num not in union:
union.append(num)
## 计算差集(list1 - list2)
difference1 = []
for num in list1:
if num not in list2:
difference1.append(num)
## 计算差集(list2 - list1)
difference2 = []
for num in list2:
if num not in list1:
difference2.append(num)
print("交集:", intersection)
print("并集:", union)
print("list1 - list2:", difference1)
print("list2 - list1:", difference2)
Claude 输入
“以下是一段Python代码,功能是计算两个列表的交集、并集、差集,代码比较冗长、可读性低,请帮我优化这段代码,要求:
- 简化代码结构,减少冗余循环;
- 提升代码可读性,添加必要注释;
- 保留核心功能(计算交集、并集、两个差集);
- 输出优化后的代码,并附带优化说明,说明优化了哪些地方;
- 添加异常处理,若输入的不是列表类型,给出错误提示;
- 支持去重,确保结果中无重复元素。[粘贴上述冗长代码]”
优化后代码(参考)
def calculate_set_operations(list1, list2):
"""
计算两个列表的交集、并集、差集
:param list1: 第一个列表
:param list2: 第二个列表
:return: 交集、并集、list1-list2差集、list2-list1差集
"""
# 异常处理:判断输入是否为列表
if not isinstance(list1, list) or not isinstance(list2, list):
raise TypeError("输入必须是列表类型!")
# 利用集合特性简化计算(集合自动去重,支持交集、并集、差集运算)
set1 = set(list1)
set2 = set(list2)
# 计算交集(两个集合中共有的元素),转换为列表并排序,提升可读性
intersection = sorted(list(set1 & set2)) # 等价于 sorted(list(set1.intersection(set2)))
# 计算并集(两个集合中所有的元素,去重),转换为列表并排序
union = sorted(list(set1 | set2)) # 等价于 sorted(list(set1.union(set2)))
# 计算差集:list1中有、list2中没有的元素,转换为列表并排序
difference1 = sorted(list(set1 - set2)) # 等价于 sorted(list(set1.difference(set2)))
# 计算差集:list2中有、list1中没有的元素,转换为列表并排序
difference2 = sorted(list(set2 - set1)) # 等价于 sorted(list(set2.difference(set1)))
return intersection, union, difference1, difference2
## 定义两个待计算的列表
list1 = [1, 2, 3, 4, 5]
list2 = [4, 5, 6, 7, 8]
## 调用函数,处理异常
try:
intersection, union, difference1, difference2 = calculate_set_operations(list1, list2)
# 输出结果,格式清晰
print(f"交集:{intersection}")
print(f"并集:{union}")
print(f"list1 - list2:{difference1}")
print(f"list2 - list1:{difference2}")
except TypeError as e:
print(f"错误:{str(e)}")
优化说明(Claude 自动输出)
- 简化循环逻辑:利用Python集合的特性(自动去重、支持交集&、并集|、差集-运算),替代原来的多层for循环,减少冗余代码,提升运行效率(集合运算比循环判断更高效);
- 封装为函数:将计算逻辑封装为calculate_set_operations函数,增强代码复用性,后续可直接调用该函数计算任意两个列表的集合运算;
- 提升可读性:添加函数注释、代码注释,说明每个步骤的功能;将结果转换为列表并排序,让输出更整齐、易读;使用f-string格式化输出,提升输出格式的清晰度;
- 添加异常处理:判断输入是否为列表类型,若不是则抛出异常并给出提示,避免代码运行崩溃;
- 保留核心功能:确保交集、并集、两个差集的计算结果与原代码一致,同时实现自动去重,避免原代码中手动去重的冗余逻辑;
- 补充等价写法:注释中给出集合方法的等价写法(如set1.intersection(set2)),方便新手理解不同的实现方式。
以上内容是否对您有帮助:

免费 AI IDE


更多建议: