找到 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)
假设我有一些列表 [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)