2013-07-31 2 views
2

예를 들어 List = [1,2,2]과 같은 목록을 가져 와서 해당 순열을 생성하고 싶습니다. 나는이 작업을 수행 할 수 있습니다 :python에서 itertools.permutations의 출력을 조작하십시오.

NewList = [list(itertools.permutations(List))] 

출력은 다음과 같습니다

[[(1, 2, 2), (1, 2, 2), (2, 1, 2), (2, 2, 1), (2, 1, 2), (2, 2, 1)]] 

문제점 : 유일한 항목 목록의 모든 순열의 목록입니다 길이 1의 목록을 반환 itertools.permutations. 즉 :

NewList[0] == [(1,2,2),(1,2,2),(2,1,2),(2,2,1),(2,1,2),(2,2,1)] 

NewList[1]

가 존재하지 않습니다.

각 항목이 순열 중 하나 인 목록을 출력하고 싶습니다. 즉,

NewList[0] == (1,2,2) 
NewList[1] == (1,2,2) 
NewList[2] == (2,1,2) 
... 
NewList[5] == (2,2,1) 

질문 : 이런 방식으로 List의 순열을 생성하는 명령이 있습니까? 실패하면 '개별 요소'인 [list(itertools.permutations(List))]에 액세스 할 수있는 방법이 있습니까?

+0

그냥 []를 제거하고 게시 한 출력도 틀리면 다음과 같아야합니다 :'[[(1, 2, 2), (1 , (2,2,1), (2,2,1), (2, 1, 2), (2, 1, 2) –

답변

3
>>> from itertools import permutations 
>>> list(permutations([1,2,2])) 
[(1, 2, 2), (1, 2, 2), (2, 1, 2), (2, 2, 1), (2, 1, 2), (2, 2, 1)] 

목록에 다시 입력 할 필요가 없습니다. 즉하지 마십시오 [list(permutations(...))] ([]을 수행함으로써 testList[0][index]을 수행 할 수 있지만 중첩 목록을 만들고 따라서 testList[index]을 사용하여 요소에 액세스 할 수 없지만이를 튜플 목록으로 유지하는 것이 좋습니다.

>>> newList = list(permutations([1, 2, 2])) 
>>> newList[0] 
(1, 2, 2) 
>>> newList[3] 
(2, 2, 1) 

이제 색인을 사용하여 요소에 액세스 할 수 있습니다.

0

왜이 작업을 수행 할 수 없습니다

NewList = [list(itertools.permutations(List))][0] 

또는 그냥이 : [ list(itertools.permutations(List)) ] 이렇게함으로써

NewList = list(itertools.permutations(List)) 

, 당신은 순열의 목록 (당신이 원하는 일을) 넣어 내부 또 다른 목록. 그래서 수정은 바깥 쪽을 제거하는 것일 것입니다