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

精简Python代码时出现Invalid Syntax,如何修正错误语句?

问题修正与代码精简方案

语法错误原因与修正

你写的answer +=1 for x in extracted_number if (int(x) < int(p))不符合Python语法,因为这种for...if的推导结构不能直接作为赋值语句的右侧内容。正确的做法是将推导式包装为生成器表达式,配合sum()函数统计符合条件的数量:

修正后的计数语句

如果要保留extracted_number列表,可以这样写:

answer = sum(1 for x in extracted_number if int(x) <= int(p))

若是累加场景则改为:

answer += sum(1 for x in extracted_number if int(x) <= int(p))

sum()会遍历生成器里的每个1(仅当条件满足时生成),最终总和就是符合条件的元素个数。

原代码的精简优化

原代码逻辑是从字符串t中截取所有长度与p一致的子串,统计数值小于等于p的子串数量。可以直接去掉中间列表extracted_number,用索引遍历+生成器求和的方式大幅精简代码,同时提升效率(避免不必要的内存占用):

def solution(t, p):
    p_int = int(p)
    p_length = len(p)
    # 遍历所有合法的起始索引,直接判断子串数值并统计
    return sum(1 for i in range(len(t) - p_length + 1) if int(t[i:i+p_length]) <= p_int)

优化点说明

  • 提前计算p的整数值和长度,避免循环中重复转换与计算,提升性能
  • 用range(len(t) - p_length + 1)生成所有合法的子串起始索引,无需修改原字符串t
  • 生成器表达式直接在sum()中运行,无需存储所有子串,节省内存

内容的提问来源于stack exchange,提问作者임재규

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 07:25:18