1

すべてのステップを指定するのではなく、特定の順列から 1 つのステップのバリエーションを取得するより動的な方法があるかどうか疑問に思っていました。私がやろうとしているのは、「(0, 0, 0, 0, 0,)」の順列と言って、選択する選択肢の可能性を範囲として指定する場合です。この場合、範囲を指定しました5 になり、選択肢は「0,1,2,3,4」になり、次のような順列を生成したい: (1,0,0,0,0) , (2,0,0,0,0 )、(3,0,0,0,0) など、一度に 1 つの要素しか変更できない場合、どうすればよいでしょうか。どんな助けでも素晴らしいでしょう!

4

2 に答える 2

2

あなたが探しているものを完全に確信していません...多分このようなもの、

def single_element_permutation(given, new):
    for i in xrange(len(given)):
        for ele in new:
            yield given[:i] + (ele,) + given[i+1:]

for e in single_element_permutation((0, 0, 0, 0, 0), range(5)):
    print e

出力:

(0, 0, 0, 0, 0)
(1, 0, 0, 0, 0)
(2, 0, 0, 0, 0)
(3, 0, 0, 0, 0)
(4, 0, 0, 0, 0)
(0, 0, 0, 0, 0)
(0, 1, 0, 0, 0)
(0, 2, 0, 0, 0)
(0, 3, 0, 0, 0)
(0, 4, 0, 0, 0)
(0, 0, 0, 0, 0)
(0, 0, 1, 0, 0)
(0, 0, 2, 0, 0)
(0, 0, 3, 0, 0)
(0, 0, 4, 0, 0)
(0, 0, 0, 0, 0)
(0, 0, 0, 1, 0)
(0, 0, 0, 2, 0)
(0, 0, 0, 3, 0)
(0, 0, 0, 4, 0)
(0, 0, 0, 0, 0)
(0, 0, 0, 0, 1)
(0, 0, 0, 0, 2)
(0, 0, 0, 0, 3)
(0, 0, 0, 0, 4)
于 2013-08-28T22:43:01.767 に答える
0
>>> from itertools import product
>>> for p in product(range(5), repeat=5):
    print(p[::-1])
(0, 0, 0, 0, 0)
(1, 0, 0, 0, 0)
(2, 0, 0, 0, 0)
(3, 0, 0, 0, 0)
(4, 0, 0, 0, 0)
(0, 1, 0, 0, 0)
(1, 1, 0, 0, 0)
....
>>> import itertools
>>> for p in itertools.permutations(range(5)):
    print(p[::-1])
(4, 3, 2, 1, 0)
(3, 4, 2, 1, 0)
(4, 2, 3, 1, 0)
(2, 4, 3, 1, 0)
(3, 2, 4, 1, 0)
....
>>> for p in itertools.combinations_with_replacement(range(5), 5):
    print(p)
(0, 0, 0, 0, 0)
(0, 0, 0, 0, 1)
(0, 0, 0, 0, 2)
(0, 0, 0, 0, 3)
(0, 0, 0, 0, 4)
(0, 0, 0, 1, 1)
....

そのように?それらの線に沿った何か?? :P

于 2013-08-28T22:40:22.513 に答える