각 단계를 지정하지 않고 주어진 순열로부터 한 단계 변형을 얻는보다 동적 인 방법이 있는지 궁금합니다. 내가 수행 할 계획은 "(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 단계 변형 생성
1
A
답변
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