Python筛选大写开头姓名、统计小写开头数量的代码校验与优化
代码校验与优化方案
原有代码存在的问题
- 判断规则不符合需求:当前用
friends[num] != friends[num].lower()筛选姓名,本质是过滤掉「全小写」的姓名,不是严格筛选「首字母为大写」的姓名。如果遇到首字母小写、后续字符带大写的异常姓名(比如eMan),会被误判定为合规姓名打印出来。 - 计数逻辑错误:统计小写姓名数量时额外减了1,公式
len(friends) - len(arr)-1属于凑巧匹配了当前示例的结果,一旦列表中小写姓名数量变化,计算结果必然出错。 - 实现冗余:先后用两次while循环遍历同一个列表,还额外创建空列表存储小写姓名,既拖慢运行效率,也增加了无意义的内存占用;手动维护循环索引的写法也很容易出现边界错误。
更简洁的实现思路
只需要遍历一次列表就能同时完成两个需求:遍历过程中遇到首字母大写的姓名直接打印,遇到首字母小写的姓名直接给计数器累加,遍历结束后直接输出计数结果即可,不需要多次循环、不需要额外存储列表。
优化后代码:
friends = ["Mohamed", "Shady", "ahmed", "eman", "Sherif"] lower_start_count = 0 for name in friends: # 直接判断首字符是否为大写,不受名字其他位置字符的大小写影响 if name[0].isupper(): print(name) else: lower_start_count += 1 print(f"所有首字母大写的姓名已打印完成,小写开头的姓名总数量为 {lower_start_count}")
运行上述代码,针对你给出的示例列表,会依次打印Mohamed、Shady、Sherif三个大写开头的姓名,最后输出小写开头姓名数量为2,完全匹配需求。
内容的提问来源于stack exchange,提问作者Amira Mohamed Abdelsalam
相关产品推荐
相关产品推荐

