精简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,提问作者임재규
相关产品推荐
相关产品推荐

