Python中的多个区间乘积

1 投票
2 回答
2224 浏览
提问于 2025-04-15 22:03

有没有更好的方法来做到这一点:

perms = product(range(1,7),range(1,7),range(1,7))

这样我就可以选择使用多少个范围?我希望它能和这个效果一样,但可以扩展。

def dice(num)
    if num == 1:
        perms = ((i,) for i in range(1,7))
    elif num == 2:
        perms = product(range(1,7),range(1,7))
    elif num == 3:
        perms = product(range(1,7),range(1,7),range(1,7))
    #... and so on

不过我知道一定有更好的方法。我是用它来计算骰子的结果。实际的代码

def dice(selection= lambda d: d[2]):   
    perms = itertools.product(range(1,7),range(1,7),range(1,7))      
    return collections.Counter(((selection(sorted(i)) for i in perms)))

我可以用各种选择器来调用它,比如 sum(d[0:2]) 来计算最低的两个骰子的和,或者 d[1] 来获取中间的骰子。

2 个回答

0

我觉得

perms = itertools.product(*([xrange(1,7)]*num))

应该能帮到你。

10

没错。可以使用 repeat 这个关键字参数:

perms = product(range(1, 7), repeat=3)

想了解更多,可以查看 文档

撰写回答