如何使用python生成此序列

Atu*_*tul 0 python python-itertools

例如,如果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)
Run Code Online (Sandbox Code Playgroud)

我试过这个" Python生成所有非递减序列 "但没有得到所需的输出.

目前我正在使用此代码,

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)
Run Code Online (Sandbox Code Playgroud)

我需要另一个好方法来生成这个序列.

ayh*_*han 6

将itertools.product与repeat参数一起使用:

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),
 ...
Run Code Online (Sandbox Code Playgroud)

  • 干净简单! (3认同)