从列表的唯一排列中获取 n 个元素的子列表

Get sublist of n elements from unique permutations of a list

我正在编写代码来一起掷不同面数的骰子。 main 函数接受一个包含 2 个数字的列表,这些数字代表骰子的面数,例如[4, 6] — 意味着程序将使用 d4d6.

来做事

这是问题所在:

我有一份要使用的所有不同类型骰子的列表 [4, 6, 8, 10, 12, 20],我需要一些代码来找出每组唯一的 2 个骰子,而不是在不同的地方传递相同的骰子顺序,例如:不要同时传递 [4, 6][6, 4].

我计划在未来扩展程序以一次掷 n 个骰子,例如5d42d20 所以不仅适用于 2 个骰子的代码将不胜感激。

最后,我希望能够掷出 2 个相同的骰子,例如:[4, 4]

如果问题需要更多解释,请告诉我。

使用 itertools 库中的 combinations_with_replacements

from itertools import combinations_with_replacement

dice = [4, 6, 8, 10, 12, 20]
N_dice = 2

print(list(combinations_with_replacement(dice, N_dice)))

给出输出

[(4, 4), (4, 6), (4, 8), (4, 10), (4, 12), (4, 20), (6, 6), (6, 8), (6, 10), (6, 12), (6, 20), (8, 8), (8, 10), (8, 12), (8, 20), (10, 10), (10, 12), (10, 20), (12, 12), (12, 20), (20, 20)]

d20 包就是这样做的。参见 https://pypi.org/project/d20/

这是一个使用示例:

d20.roll("1d12+3d8+4d6+14").total