2013-08-28 2 views
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 단계 변형 생성

답변

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) 
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