我只是想不出一种方法来解决我的问题:x是整数。我想要一个x元组的所有可能组合的列表,其中这些元组的元素范围是0到x(不包括x)。
因此,如果x = 3
我有3 ^ 3个组合:[(0,0,0),(0,0,1),(0,0,2),(0,1,0),(0,1,1),(0,1,2),(0,2,0),(0,2,1),(0,2,2),(1,0,0),(1,0,1),(1,0,2),(1,1,0),(1,1,1),(1,1,2),(1,2,0),(1,2,1),(1,2,2),(2,0,0),(2,0,1),(2,0,2),(2,1,0),(2,1,1),(2,1,2),(2,2,0),(2,2,1),(2,2,2)]
。
如果x = 4
将会有4个元组的4 ^ 4组合,其中这些元组的元素在{0,1,2,3}中。
答案 0 :(得分:2)
以下是使用itertools
来获取所需内容的正确方法:
list(itertools.product(range(3), repeat=3))
输出为:
[(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 1, 0), (0, 1, 1),
(0, 1, 2), (0, 2, 0), (0, 2, 1), (0, 2, 2), (1, 0, 0),
(1, 0, 1), (1, 0, 2), (1, 1, 0), (1, 1, 1), (1, 1, 2),
(1, 2, 0), (1, 2, 1), (1, 2, 2), (2, 0, 0), (2, 0, 1),
(2, 0, 2), (2, 1, 0), (2, 1, 1), (2, 1, 2), (2, 2, 0),
(2, 2, 1), (2, 2, 2)]
当然,可以使用3以外的其他值来扩大规模。
list(itertools.product(range(x), repeat=x))
将适用于任何x
。
答案 1 :(得分:1)
我认为这只是列表理解:
mylist = [(x,y,z) for x in range(3) for y in range(3) for z in range(3)]
请注意,使用itertools.permutations(range(3))不会生成重复项,而只会生成集合(0,1,2)的排列。即您将不会得到(1、1、2)等。
答案 2 :(得分:0)
好的,不是排列,而是重复排列。
无论如何,itertools.product()
正在这样做:
list(itertools.product([0,1,2],repeats=3))
结果:
[(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 1, 0), (0, 1, 1), (0, 1, 2), (0, 2, 0), (0, 2, 1), (0, 2, 2), (1, 0, 0), (1, 0, 1), (1, 0, 2), (1, 1, 0), (1, 1, 1), (1, 1, 2), (1, 2, 0), (1, 2, 1), (1, 2, 2), (2, 0, 0), (2, 0, 1), (2, 0, 2), (2, 1, 0), (2, 1, 1), (2, 1, 2), (2, 2, 0), (2, 2, 1), (2, 2, 2)]
哦,这是一个骗子。但我也找到了:-)
(旁注:组合是关于子集的,因此元素的顺序对它们无关紧要)