如何编写Python函数过滤列表中的全大写单词并修复现有错误代码
代码问题排查
- 返回语句位置错误:
return new_list写在了for循环内部,函数执行完第一次循环就会直接返回结果,不会遍历完所有列表元素。 - 列表引用赋值问题:
new_list = my_list没有生成新的列表对象,只是给原列表绑定了新的变量名,修改my_list的同时会同步修改new_list,还会意外改动函数外的原列表。 - 遍历列表时删除元素会导致索引偏移:一边遍历原列表一边删元素,会让后续元素的索引前移,导致部分元素被跳过没有做校验,出现漏过滤的情况。
正确实现
简洁版(列表推导式实现,Python最佳实践)
def no_upper(my_list : list): return [word for word in my_list if not word.isupper()] if __name__ == "__main__": my_list = ["ABC", "JAVA", "Python", "user", "CODE"] new_list = no_upper(my_list) print(new_list)
显式循环版(和原写法逻辑对齐的修复方案)
def no_upper(my_list : list): new_list = [] for word in my_list: if not word.isupper(): new_list.append(word) return new_list if __name__ == "__main__": my_list = ["ABC", "JAVA", "Python", "user", "CODE"] new_list = no_upper(my_list) print(new_list)
两个版本运行输出均为 ['Python', 'user'],符合预期。
内容的提问来源于stack exchange,提问作者user17135153
相关产品推荐
相关产品推荐

