Python代码如何合并两个for循环 无需负向列表直接筛选符合条件的结果
Python代码优化方案
你的代码目标是筛选区间[left, right]内的自除数(即可以被自身每一位非0数字整除的数),可以通过内置判断逻辑直接合并两次循环,无需维护负向筛选列表。
核心需求实现技巧
当你需要满足循环内所有判断条件才保留结果时,优先使用Python内置的all()函数:
- 只有遍历的所有元素都满足条件时才返回
True - 只要遇到一个不满足条件的元素就会立刻终止遍历(短路特性),效率比手动加标志位更高
逻辑更复杂的场景也可以单独封装返回布尔值的判断函数,所有条件满足时返回True,否则返回False即可。
优化后代码
def selfDividingNumbers(left: int, right: int) -> list[int]: def is_valid(num): tmp = num while tmp > 0: remain = tmp % 10 # 出现0或者无法整除的情况,直接返回不合法 if remain == 0 or num % remain != 0: return False # 原代码的/是浮点数除法会导致循环异常,改为整数除法// tmp = tmp // 10 return True # 一次遍历直接生成结果 return [i for i in range(left, right + 1) if is_valid(i)]
优化收益
- 去掉了额外的
not_ans负向列表存储,减少了空间开销 - 去掉了第二次遍历区间做差集的逻辑,减少了遍历次数
- 修复了原代码浮点数除法导致的死循环潜在bug
内容的提问来源于stack exchange,提问作者Dongxuan Zhang
相关产品推荐
相关产品推荐

