代码统计字符串列表中子串出现次数的困惑及新手友好替代方案问询
针对新手的代码替代方案
1. 替换open("passwordlog.txt").read().splitlines()的写法
原代码一行完成了文件读取和按行拆分,但逻辑不够直观,且直接open文件不主动关闭可能存在资源泄漏风险。推荐用更清晰的逐行读取写法:
log_list = [] # with语句会自动关闭文件,无需手动调用close() with open("passwordlog.txt", "r") as log_file: # 直接遍历文件对象,每次循环获取一行内容 for line in log_file: # strip()去掉每行末尾的换行符和前后多余空格,和splitlines效果一致 cleaned_line = line.strip() log_list.append(cleaned_line)
如果只想保留行内空格、仅去掉换行符,可把strip()换成rstrip('\n')。
2. 替换sum("< 6" in i for i in log_list)的写法
原代码利用Python中True=1、False=0的特性,通过生成器表达式求和,对新手来说较抽象。换成直白的循环计数写法:
# 初始化计数器 short_password_count = 0 # 遍历日志列表的每一行 for line in log_list: # 判断当前行是否包含目标子串 if "< 6" in line: # 符合条件就给计数器加1 short_password_count += 1 # 输出统计结果 print(f"密码长度小于6的记录数:{short_password_count}")
每一步逻辑清晰,跟着循环流程就能明确统计过程。
内容的提问来源于stack exchange,提问作者user19979416
相关产品推荐
相关产品推荐

