Python 生成置换的所有一步变体

Python 生成置换的所有一步变体,python,permutation,itertools,Python,Permutation,Itertools,我只是想知道是否有一种更为动态的方法,可以从给定的排列中获得一步变化,而不是指定每一步。我计划做的是,如果我有一个“(0,0,0,0,0,0,)”的排列,我指定一个选择的可能性作为一个范围,所以在这种情况下,我指定范围为5,选择将是“0,1,2,3,4”,我想生成如下排列:(1,0,0,0,(2,0,0,0),(3,0,0,0)如此类推,一次只能更改一个元素,我该怎么做呢。任何帮助都会很好 >>> from itertools import product >>&g

我只是想知道是否有一种更为动态的方法,可以从给定的排列中获得一步变化,而不是指定每一步。我计划做的是,如果我有一个“(0,0,0,0,0,0,)”的排列,我指定一个选择的可能性作为一个范围,所以在这种情况下,我指定范围为5,选择将是“0,1,2,3,4”,我想生成如下排列:(1,0,0,0,(2,0,0,0),(3,0,0,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

不完全确定你在找什么。。。也许是这样的

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)