Python:如何从一系列数字范围创建组合列表

2024-09-19 19:12:16 发布

您现在位置:Python中文网/ 问答频道 /正文

对于n长度的数值列表,例如[1, 3, 1, 2, ...],我想创建一个列表,列出range[x+1]中所有可能的值组合,其中x是列表中的值。输出可能如下所示:

for list[1, 3, 2] return all possible lists of range[x+1] values:
    # the sequence of the list is unimportant
[
[0,0,0],[1,0,0],[0,1,0],[0,2,0],[0,3,0],[0,0,1],[0,0,2],[1,1,0],
[1,2,0],[1,3,0],[1,0,1],[1,0,2],[0,1,1],[0,2,1],[0,3,1],[0,1,2],
[0,2,2],[0,3,2],[1,1,1],[1,2,1],[1,3,1],[1,1,2],[1,2,2],[1,3,2]
]

所以在这个例子中,我寻找[e1, e2, e3]的所有变体e1 in [0,1], e2 in [0,1,2,3] and e3 in [0,1,2]


Tags: ofthein列表forreturnrangeall
3条回答

itertools.product与动态指定的迭代器列表一起使用:

vals = [1,3,2]
for item in itertools.product(*[range(x+1) for x in vals]):
    print item

输出:

^{pr2}$

要获得问题中显示的确切顺序(尽管顺序不同,但这不是问题),请使用此函数:

import itertools as it

def combs(lst):
    return [list(e) for e in it.product(*(range(x+1) for x in lst))]

结果如预期:

^{pr2}$

Python的itertools模块有一个工具,可以满足您的需要:

import itertools
p = itertools.permutations([0, 1, 2, 3])
p_as_list = list(p)

编辑:由于您的需求相当具体,因此您可以使用自己的函数来完成类似的任务:(请注意,我还没有完成实现,可能有人会改进它):

^{pr2}$

编辑:我第一次误解了你的问题,所以我要为此道歉。不过,我还是不要管这个。在

相关问题 更多 >