如何在给定每个变量的域的情况下生成n个变量的排列。 (在python中)
我知道itertools,但这需要一个固定的域来进行排列,这样才能胜任。还有一个python库这样做吗?感谢。
基本上: 给出3个变量: A与域(2,3) B与域(1) C与域(1,2,3)
如何生成ABC的所有排列?
2,1,1
3,1,1
2,1,2
3,1,2
2,1,3
3,1,3
答案 0 :(得分:4)
>>> list(itertools.product((2, 3), (1,), (1, 2, 3)))
[(2, 1, 1), (2, 1, 2), (2, 1, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3)]
答案 1 :(得分:1)
itertools.product
函数在您声明时不需要“固定域”,也不需要任何函数。
例如,此代码可以满足您的需求:
a = [2, 3]
b = [1]
c = [1, 2, 3]
print(itertools.product(a, b, c))
并且对任何长度的任何序列集都会这样做。
答案 2 :(得分:1)
itertools.product
已得到适当的建议,并且可以解决手头的问题。如果您 - 如果仅出于学术原因 - 对示例实现感兴趣,那么这是一个生成器函数:
def cartesian_product(*lists): # lists can really be any sequences
if any([not l for l in lists]): # c.p. is empty if any list is empty
return
n = len(lists)
indexes = [0] * n
while True:
yield tuple(lists[i][indexes[i]] for i in xrange(n)) # currently indexed element of each list
# update indexes
for i in xrange(n-1, -1, -1): # loop through indexes from back
if indexes[i] < len(lists[i]) - 1: # stop at first index that can be incremented ...
indexes[i] += 1 # ... increment it ...
indexes[i+1:n] = [0] * (n - i - 1) # ... reset all succeeding indexes to 0
break
else: # no index could be incremented -> end
break