2017-09-06 6 views
3

아래의 코드는 배열에 대한 모든 순열을 제공합니다. 한 번에 하나의 순열을 사용할 수있는 함수를 작성하고 싶습니다. (처리하고 싶습니다. 목적 함수에서 사용할 수 있도록, 사전에 이들 모두를 생성하지 않고 예를 들어 [2, 3, 5, 4, 1, 6]의 한번에 하나의 전치)과 같은 여러 posibilities이파이썬에서 한 번에 배열의 한 permuation을 얻는 함수를 작성하는 방법

s = np.array([1, 2, 3, 4, 5, 6]) 
from itertools import permutations 
for s_temp in permutations(s): 
    print (s_temp) 
+7

'permutations (s)'는 반복자이므로 모든 것을 미리 생성하지 않고 "한 번에 하나의 순열"을 처리 할 수 ​​있습니다. –

+3

당신은 옳은 길을 걷고 있습니다. 그러나 조금 더 많은 내용이 없으면 무엇을해야할 지 말할 수 없습니다. –

+0

인쇄는 한 번에 하나의 순열을 소비합니까? print를 하나의 순열에 작용하는 함수로 바꿀 수있다. – Quickbeam2k1

답변

1

, permutations은 반복기를 반환하므로 호출해야하는 코드가 무엇이든 print을 변경하면 코드가 작동합니다.

from itertools import permutations 
s = permutations(range(3)) 
s 
<itertools.permutations object at 0x000000000377CFC0> 
next(s) 
(0, 1, 2) 

방금 ​​map를 사용할 수있는 순열의 각 동일한 기능을 처리하려면 : 당신이 한 번

from itertools import permutations 
def process(s): 
    for s_temp in permutations(s): 
     call_your_stuff(s_temp) 

또한 순열은 당신이 next를 호출에 다음 항목을 얻을 수있는 객체 당신은를 수집 할 수 있습니다

s = permutations(range(3)) 
map(lambda (x, y, z): x+y-z, s) 
[-1, 1, -1, 3, 1, 3] 

을 : 당신이 호출 할 필요가 무엇 이건 그냥 예에서 lambda 기능을 대체 당신이 순열을 소비하는 데이터가 "손실"될 것이라고 반복자 객체 번 (기타리스트, 튜플,로) 데이터를 수집 해달라고하면

s = list(permutations(range(3))) 
s 
[(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 2, 0), (2, 0, 1), (2, 1, 0)] 

공지 사항

것은 (당신이 가진 것 : 추가 처리를 위해 목록에 데이터

+0

감사합니다. 감사합니다.이게 도움이됩니다. –