n项的组合数

Number of combinations of n terms

是否有代数公式可以告诉我 n 项的不同组合?

如果我有:

{0: ['Hello!']}

{1: ['Welcome']}

{2: ['to']}

所有的组合都是:

['Hello!',  'Welcome', 'to'],
['Hello!',  'to',      'Welcome'],
['Welcome', 'Hello!',  'to'],
['Welcome', 'to',      'Hello!'],
['to',      'Hello!',  'Welcome'],
['to',      'Welcome', 'Hello!'],

但是描述这个的公式是什么?然后我会使用公式来编写我的程序并根据我可用的单词创建所有可能的三元组。我看过这个 link 但还没有想出答案:

https://www.mathsisfun.com/combinatorics/combinations-permutations.html

您描述的是 n 个对象的排列数。有n! = 1 × 2 × ... × n(也称为 n 阶乘)这样的排列。

您需要 n 项的 排列 itertools 有一个排列方法。您可以按如下方式使用它:

import itertools

lst = ['A', 'B', 'C', 'D']
z = itertools.permutations(lst, len(lst))

print(list(z))

如果您想了解更多:https://docs.python.org/3/library/itertools.html#itertools.permutations

import itertools

def permutations(iterable, r=None):
    pool = tuple(iterable)
    n = len(pool)
    r = n if r is None else r
    for indices in itertools.product(range(n), repeat=r):
        if len(set(indices)) == r:
            yield tuple(pool[i] for i in indices)

lst = ['A', 'B', 'C', 'D']
z = permutations(lst, len(last))

print(list(z))