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

求Python脚本:生成含全部3个数字的4位可重复数字组合

生成包含全部给定数字的4位组合的简洁Python实现

需求说明

编写Python脚本,从给定3个数字(如1、5、8)生成4位数字组合,要求:

  • 组合可重复单个数字
  • 必须包含全部3个给定数字
  • 输出格式为空格分隔的数字串

初始尝试代码

用户最初用嵌套循环实现,但输出包含不符合要求的结果(仅含1个或2个数字的组合):

def GetCombFrom(arr):
    for i in range(4):
        for j in range(4):
            for k in range(4):
                for z in range(4):
                    if((i != 3) and (j != 3) and (k != 3) and (z!=3)):
                        print(f"{arr[i]} {arr[j]} {arr[k]} {arr[z]}")

初始代码的错误输出

1 1 1 1
1 1 1 5
1 1 1 8
1 1 5 1
1 1 5 5
1 1 5 8
1 1 8 1
1 1 8 5
1 1 8 8
1 5 1 1
1 5 1 5
1 5 1 8
1 5 5 1
1 5 5 5

用户自行实现的正确代码

用户通过多个条件判断筛选出符合要求的组合:

def GetCombFrom(arr):
    for i in range(4):
        for j in range(4):
            for k in range(4):
                for z in range(4):
                    if((i != 3) and (j != 3) and (k != 3) and (z!=3)):
                        if((i==j) and (j !=k) and (k!=z) and (i!=z) and (i!= k) and (j!=z)):
                            print(f"{arr[i]} {arr[j]} {arr[k]} {arr[z]}")
                        if((i==k) and (i !=j) and (j!=k) and (i!=z) and (k!=z) and (j!=z)):
                            print(f"{arr[i]} {arr[j]} {arr[k]} {arr[z]}")
                        if((i==z) and (i !=j) and (i!=k) and (j!=k) and (k!=z) and (j!=z)):
                           print(f"{arr[i]} {arr[j]} {arr[k]} {arr[z]}")
                        if((j==k) and (i !=j) and (i!=k) and (i!=z) and (k!=z) and (j!=z)):
                            print(f"{arr[i]} {arr[j]} {arr[k]} {arr[z]}")
                        if((k==z) and (i !=j) and (i!=k) and (i!=z) and (j!=k) and (j!=z)):
                            print(f"{arr[i]} {arr[j]} {arr[k]} {arr[z]}")
                        if((j==z) and (i !=j) and (i!=k) and (i!=z) and (j!=k) and (k!=z)):
                            print(f"{arr[i]} {arr[j]} {arr[k]} {arr[z]}")

正确输出结果

1 1 5 8
1 1 8 5
1 5 1 8
1 5 5 8
1 5 8 1
1 5 8 5
1 5 8 8
1 8 1 5
1 8 5 1
1 8 5 5
1 8 5 8
1 8 8 5
5 1 1 8
5 1 5 8
5 1 8 1
5 1 8 5
5 1 8 8
5 5 1 8
5 5 8 1
5 8 1 1
5 8 1 5
5 8 1 8
5 8 5 1
5 8 8 1
8 1 1 5
8 1 5 1
8 1 5 5
8 1 5 8
8 1 8 5
8 5 1 1
8 5 1 5
8 5 1 8
8 5 5 1
8 5 8 1
8 8 1 5
8 8 5 1

更简洁的实现方案

可以利用Python标准库的itertools.product生成所有可能的4位组合,再通过集合判断是否包含全部给定数字,代码更简洁易读:

import itertools

def generate_valid_combinations(arr):
    # 生成所有4位可重复的组合
    all_combinations = itertools.product(arr, repeat=4)
    # 筛选出包含全部3个数字的组合
    valid_combinations = [comb for comb in all_combinations if set(comb) == set(arr)]
    # 按要求格式输出
    for comb in valid_combinations:
        print(' '.join(map(str, comb)))

# 测试调用
generate_valid_combinations([1,5,8])

代码说明

  1. itertools.product(arr, repeat=4):生成从arr中选取元素的所有4位可重复排列,等价于嵌套4层循环,但代码更简洁。
  2. set(comb) == set(arr):将组合转为集合后,判断是否和原数字集合完全一致,确保包含全部3个数字。
  3. ' '.join(map(str, comb)):将组合中的数字转为字符串并以空格分隔,符合输出格式要求。

这种实现不仅代码量大幅减少,逻辑也更清晰,扩展性更强——如果后续需要调整位数或数字数量,只需修改repeat参数或输入数组即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:45:36