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

如何遍历n维列表实现任意数量骰子的全组合点数求和

解法1:使用Python标准库itertools.product(推荐)

itertools.product原生支持生成多个可迭代对象的笛卡尔积,可直接适配任意数量的骰子场景,代码改写字数少、逻辑清晰:

import itertools

dice = [4,6,8] # 支持任意长度的面数列表,比如示例为1个4面、1个6面、1个8面骰子
rawDiceOutcomes = []
finalOutcomes = []

# 生成每个骰子的可选点数列表
for face in dice:
    rawDiceOutcomes.append([i for i in range(1, face+1)])

# 生成所有点数组合并求和
for outcome_tuple in itertools.product(*rawDiceOutcomes):
    finalOutcomes.append(sum(outcome_tuple))

代码里的*是解包操作,会把n个骰子的点数列表作为参数逐个传入itertools.product,自动生成所有可能的点数组合,每个组合以元组返回,直接求和即可,哪怕传入100个骰子的面数参数也能正常处理。


解法2:手动实现累积迭代(无第三方依赖)

如果不想引入标准库,可以用逐层累积的逻辑实现,每加入一个骰子就和当前已有的求和结果做二次组合,遍历完所有骰子就能得到最终结果:

dice = [4,6,8]
finalOutcomes = [0] # 初始值代表0个骰子时和为0

for face in dice:
    temp = []
    # 已有求和结果和新骰子的每个点数相加,得到更新后的求和列表
    for current_sum in finalOutcomes:
        for point in range(1, face+1):
            temp.append(current_sum + point)
    finalOutcomes = temp

该方法逻辑简单易读,不需要依赖任何额外库,同样支持任意数量的骰子输入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:09:03