17

重複の可能性:
ベキ集合と集合のデカルト積 python

Python Itertools.permutations() を使用して、繰り返し文字を含む順列を受け取り、出力したいと思います。例として、これは以下の私の関数とその現在の出力です。

def perm(n,i):
    b = 0
    while b < n:
        n= n -1
        from itertools import permutations as p
        file.write('\n'.join([''.join(item) for item in p(i,n)]))
perm(4,'0123')

出力は次のとおりです。

012
013
021
023
031
032
102
103
120
123
130
132
201
203
210
213
230
231
301
302
310
312
320
321.....

112 や 222 のような出力を取得するにはどうすればよいですか?

私が理解していることから、組み合わせは、順列がどこにあるかに固有の順序ではありません。私が探しているのは、すべての組み合わせを見つけてから、各組み合わせのすべての順列を見つけることです。これは可能ですか?

4

2 に答える 2

42

順列はまったく必要ありません。デカルト積が必要です:

import itertools

def perm(n, seq):
    for p in itertools.product(seq, repeat=n):
        file.write("".join(p))
        file.write("\n")

perm(4, "0123")
于 2012-12-22T22:07:42.343 に答える
11

あなたが探しているように見えるのは、itertools によって提供される順列ではなく、デカルト積です。

アプリケーションに最適なものを決定するために、順列、組み合わせ、置換との組み合わせ、デカルト積の違いに慣れておくとよいかもしれませんが、別のオプションを探している可能性があります。

于 2012-12-22T22:01:10.667 に答える