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

Python带条件生成器实现:按奇偶索引数字和规则填充列表

实现符合要求的Python生成器

核心思路

要满足“偶数索引位置数字的各位之和等于奇数索引位置数字的各位之和”的规则,我们可以按以下逻辑实现:

  • 先写一个辅助函数计算5位数的各位之和(因为目标区间是10000-99999,全是5位数)
  • 生成器每次产出一对数字:第一个用于偶数索引,第二个用于奇数索引,两者的各位和严格相等
  • 为避免重复,生成第二个数时会跳过和第一个数相同的值(不需要去重的话可以去掉该判断)

代码实现

import random

def digit_sum(n):
    """计算数字n的各位之和"""
    return sum(int(digit) for digit in str(n))

def paired_number_generator(a=10000, b=99999):
    """生成符合规则的数对:偶数索引数的各位和与奇数索引数的各位和一致"""
    while True:
        # 随机生成第一个数,确定目标各位和
        first_num = random.randint(a, b)
        target = digit_sum(first_num)
        
        # 找到第二个同各位和的数,避免重复
        second_num = first_num
        while second_num == first_num:
            second_num = random.randint(a, b)
            if digit_sum(second_num) == target:
                break
        
        yield first_num
        yield second_num

# 使用示例:生成长度为6的符合规则的列表
lst = [num for _, num in zip(range(6), paired_number_generator())]
print(lst)

代码说明

  • digit_sum函数:将数字转为字符串遍历每一位,转成整数后求和,逻辑简单直观
  • paired_number_generator生成器:
    • 无限循环产出数对,先确定第一个数的各位和作为目标
    • 循环随机生成第二个数,直到找到符合各位和要求且不重复的值
    • 先产出第一个数(对应偶数索引),再产出第二个数(对应奇数索引),填充列表时自然满足规则
  • 使用示例:通过zip(range(6))控制生成6个元素,即3组符合要求的数对

验证方法

可以用以下代码验证生成的列表是否符合规则:

def is_valid(lst):
    for idx in range(0, len(lst)-1, 2):
        if digit_sum(lst[idx]) != digit_sum(lst[idx+1]):
            return False
    return True

# 验证示例列表
print(is_valid(lst))  # 正常情况会输出True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:25:18