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

如何在Python的for循环中跳过指定大范围的迭代?

在Python中跳过for循环大量迭代的实现方案

当然可以实现,而且绝对不推荐直接遍历整个范围再用continue跳过——面对100万到1亿的量级,这种方式会做大量无意义的迭代,效率极低。更高效的做法是直接生成需要处理的区间,只遍历有效范围。

核心思路

根据你的需求,需要跳过的区间是首位为2、4、6、8对应的范围:

  • 首位2:200万-300万、2000万-3000万
  • 首位4-7:400万-800万、4000万-8000万
  • 首位8:800万-900万、8000万-9000万

反过来,需要保留的区间就是首位为1、3、7、9对应的范围,我们可以直接定义这些区间,然后逐个遍历。

手动定义区间实现

适合范围固定的场景,代码直观易懂:

# 定义所有需要处理的有效区间(左闭右开,符合Python range特性)
valid_ranges = [
    # 百万级区间(100万 - 1000万)
    (1_000_000, 2_000_000),    # 首位1:100万-200万
    (3_000_000, 4_000_000),    # 首位3:300万-400万
    (7_000_000, 8_000_000),    # 首位7:700万-800万
    # 千万级区间(1000万 - 1亿)
    (10_000_000, 20_000_000),  # 首位1:1000万-2000万
    (30_000_000, 40_000_000),  # 首位3:3000万-4000万
    (70_000_000, 80_000_000),  # 首位7:7000万-8000万
    (90_000_000, 100_000_000), # 首位9:9000万-1亿
]

# 遍历每个有效区间
for start, end in valid_ranges:
    for num in range(start, end):
        # 在这里执行你的业务逻辑
        print(num)  # 示例操作,替换为实际需求

自动生成有效区间

如果范围可能变化(比如扩展到10亿),可以用代码自动生成有效区间,更灵活:

def generate_valid_ranges(start_total, end_total):
    valid_ranges = []
    # 针对百万、千万量级生成区间(可根据需求添加更大量级)
    magnitudes = [10**6, 10**7]
    
    for mag in magnitudes:
        # 当前量级的实际上下限(受总范围约束)
        lower = max(mag, start_total)
        upper = min(mag * 10, end_total)
        
        # 遍历当前量级下的所有首位数字
        for first_digit in range(1, 10):
            interval_start = first_digit * mag
            interval_end = (first_digit + 1) * mag
            
            # 调整区间以适配总范围
            actual_start = max(interval_start, lower)
            actual_end = min(interval_end, upper)
            
            # 保留非跳过的首位区间,且区间有效
            if first_digit not in {2, 4, 6, 8} and actual_start < actual_end:
                valid_ranges.append((actual_start, actual_end))
    return valid_ranges

# 生成100万到1亿的有效区间
valid_ranges = generate_valid_ranges(1_000_000, 100_000_000)

# 遍历区间执行逻辑
for start, end in valid_ranges:
    for num in range(start, end):
        # 业务逻辑代码
        pass

不推荐的低效率写法

如果非要用单个for循环加continue,代码如下,但不适合大数量级场景——每次迭代都要转换字符串取首位,且要遍历9900万次,速度极慢:

for num in range(1_000_000, 100_000_000):
    first_digit = int(str(num)[0])
    if first_digit in {2, 4, 6, 8}:
        continue
    # 业务逻辑代码
    print(num)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 11:43:17