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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:06:03