You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何针对两个列表使用列表推导式?附代码优化需求

用列表推导式重构匹配统计逻辑

原代码里的嵌套循环核心是统计每行中目标单词的出现次数,咱们可以用**列表推导式+sum()**来替代,既简洁又能实现完全一样的逻辑:

重构后的代码

# 替换原嵌套循环部分
login = sum(
    1
    for bline in lines
    for word in words
    if (
        (processed_line := return_only_ascii(bline.decode())) != "\n"
        and processed_line.find(word) != -1
    )
)

逻辑说明

  • 外层遍历lines里的每一行bline,内层遍历words里的每个目标单词
  • 先把bline解码成字符串,再转成纯ASCII格式得到processed_line
  • 如果processed_line是空行(等于"\n"),直接跳过这一行的单词检查;否则只要单词在该行中存在,就计数1
  • 最后用sum()把所有匹配的次数加起来,直接赋值给login

补充:处理解码异常

如果原文件里有无法解码的字节,原代码会直接报错,咱们可以加个小辅助函数来处理这种情况:

# 先定义辅助解码函数
def safe_decode(bline):
    try:
        return bline.decode()
    except UnicodeDecodeError:
        return ""

# 替换嵌套循环的代码
login = sum(
    1
    for bline in lines
    for word in words
    if (
        (processed_line := return_only_ascii(safe_decode(bline))) != "\n"
        and processed_line.find(word) != -1
    )
)

这样既保留了原逻辑的功能,又用更简洁的推导式替代了嵌套循环,运行效率也没差。

内容的提问来源于stack exchange,提问作者Max

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 23:01:12