如何将含多语句的Python for循环改写为单行列表推导式?
将嵌套循环改写为单行列表推导式
直接给你两段循环的单行改写方案,再拆解逻辑说明:
第二段循环的单行写法
step_2_file = [matching_line for line in step_1_file for matching_line in findall(r'^[^[.|,|-]+(?=[.|,])', line)]
这段对应原代码的两层嵌套循环:外层遍历step_1_file的每一行,内层遍历该行正则匹配的结果,把所有匹配项直接收集到列表中,和原循环逻辑完全等价。
第三段循环的单行写法
step_3_file = [''.join(c for c in line if c in characters) for line in step_2_file]
原循环是逐字符检查并替换非法字符,这里改用生成器表达式筛选出characters中存在的字符,再通过join拼接成新字符串,比原代码的多次replace操作更高效,逻辑完全一致。
完整单行版本整合
把所有步骤串联起来:
step_1_file = [line for line in input_file if line.startswith(tuple(A_keywords))] step_2_file = [matching_line for line in step_1_file for matching_line in findall(r'^[^[.|,|-]+(?=[.|,])', line)] step_3_file = [''.join(c for c in line if c in characters) for line in step_2_file] step_4_file = [line for line in step_3_file if ' ' not in line]
内容的提问来源于stack exchange,提问作者Javi
相关产品推荐
相关产品推荐

