如何使用 python 生成此序列
How to generate this sequence using python
例如,如果 q = 2,那么我必须生成 [1,1] 到 [2,2] 之间的所有序列。
如果 q = 3,则生成 [1,1,1] 到 [3,3,3] 之间的序列。对于 q = 4,然后生成 [1,1,1,1] 到 [4,4,4,4] 之间的序列,等等。
序列示例。
对于 q = 3
(1, 1, 1)
(1, 1, 2)
(1, 1, 3)
(1, 2, 1)
(1, 2, 2)
(1, 2, 3)
(1, 3, 1)
(1, 3, 2)
(1, 3, 3)
(2, 1, 1)
(2, 1, 2)
(2, 1, 3)
(2, 2, 1)
(2, 2, 2)
(2, 2, 3)
(2, 3, 1)
(2, 3, 2)
(2, 3, 3)
(3, 1, 1)
(3, 1, 2)
(3, 1, 3)
(3, 2, 1)
(3, 2, 2)
(3, 2, 3)
(3, 3, 1)
(3, 3, 2)
(3, 3, 3)
我试过这个“”但没有得到所需的输出。
目前我正在使用这个代码,
import itertools
def generate(q):
k = range(1, q+1) * q
ola = set(i for i in itertools.permutations(k, q))
for i in sorted(ola):
print i
generate(3)
我需要另一种生成此序列的好方法。
使用 itertools.product 和重复参数:
q = 2
list(itertools.product(range(1, q + 1), repeat=q))
Out: [(1, 1), (1, 2), (2, 1), (2, 2)]
q = 3
list(itertools.product(range(1, q + 1), repeat=q))
Out:
[(1, 1, 1),
(1, 1, 2),
(1, 1, 3),
(1, 2, 1),
(1, 2, 2),
...
我想你想要 itertools.product()
,它可以对可迭代元素进行所有可能的组合。 itertools.permutations()
不重复元素,itertools.combinations()
或 itertools.combinations_with_replacement()
仅按排序顺序排列(例如,输入可迭代对象的第一个元素不会是结果的最后一个元素)。
from itertools import product
def generate(q):
assert q > 0 # not defined for <= 0
return list(product(range(1,q+1), repeat=q))
generate(3) # [(1,1,1), (1,1,2), ..., (3,3,2), (3,3,3)]
例如,如果 q = 2,那么我必须生成 [1,1] 到 [2,2] 之间的所有序列。 如果 q = 3,则生成 [1,1,1] 到 [3,3,3] 之间的序列。对于 q = 4,然后生成 [1,1,1,1] 到 [4,4,4,4] 之间的序列,等等。
序列示例。 对于 q = 3
(1, 1, 1)
(1, 1, 2)
(1, 1, 3)
(1, 2, 1)
(1, 2, 2)
(1, 2, 3)
(1, 3, 1)
(1, 3, 2)
(1, 3, 3)
(2, 1, 1)
(2, 1, 2)
(2, 1, 3)
(2, 2, 1)
(2, 2, 2)
(2, 2, 3)
(2, 3, 1)
(2, 3, 2)
(2, 3, 3)
(3, 1, 1)
(3, 1, 2)
(3, 1, 3)
(3, 2, 1)
(3, 2, 2)
(3, 2, 3)
(3, 3, 1)
(3, 3, 2)
(3, 3, 3)
我试过这个“
目前我正在使用这个代码,
import itertools
def generate(q):
k = range(1, q+1) * q
ola = set(i for i in itertools.permutations(k, q))
for i in sorted(ola):
print i
generate(3)
我需要另一种生成此序列的好方法。
使用 itertools.product 和重复参数:
q = 2
list(itertools.product(range(1, q + 1), repeat=q))
Out: [(1, 1), (1, 2), (2, 1), (2, 2)]
q = 3
list(itertools.product(range(1, q + 1), repeat=q))
Out:
[(1, 1, 1),
(1, 1, 2),
(1, 1, 3),
(1, 2, 1),
(1, 2, 2),
...
我想你想要 itertools.product()
,它可以对可迭代元素进行所有可能的组合。 itertools.permutations()
不重复元素,itertools.combinations()
或 itertools.combinations_with_replacement()
仅按排序顺序排列(例如,输入可迭代对象的第一个元素不会是结果的最后一个元素)。
from itertools import product
def generate(q):
assert q > 0 # not defined for <= 0
return list(product(range(1,q+1), repeat=q))
generate(3) # [(1,1,1), (1,1,2), ..., (3,3,2), (3,3,3)]