找到 m 长列表的所有 n 长排列(有重复),n>m

find all n-long permutations (with repeats) of m-long list, n>m

假设我有一些列表 [0,1,2]。 然后我想要 return 这个列表的所有 n 长“排列”。 例如,如果 n=5,我应该列举 3^5 个选项:

[0,0,0,0,0]
[0,0,0,0,1]
[0,0,0,0,2]
[0,0,0,1,0]
...
[2,2,2,2,2]

我在堆栈溢出上浏览了一段时间这样的 post,并尝试了 itertools 库中的许多函数,包括组合、combinations_with_repeats、排列等,但是 none 这些将给我我想要的输出。自己编写代码并不难,但我觉得 5 层嵌套循环在我的代码中看起来非常混乱,如果存在另一个库,我宁愿使用它的实现。我想我只是在错误的地方搜索。谢谢

您也可以避免 sort_list 这一步。这样做只是为了让订购看起来像您原来的问题。并使用 pandas df 使它看起来像你的问题。

lst = [0, 1, 2]
n = 5
def permutations(lst, n):
    if n == 0:
        return [[]]
    return [pre + [i] for i in lst for pre in permutations(lst, n - 1)]


# sort list of lists
def sort_list(lst):
    for i in range(len(lst)):
        lst[i].sort()
    return lst


import pandas as pd

print(pd.DataFrame(sort_list(permutations(lst, n))))

Python 的 itertools.product 将完全满足您的需求。

import sys
from itertools import product

DIGITS = (0, 1, 2)
N = int(sys.argv[1])

for tup in product(DIGITS, repeat = N):
    print(tup)