如何在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
相关产品推荐
相关产品推荐

