2012-05-21 4 views
1

이 문제에 대한 몇 가지 답변을 찾았지만 의도 한 바가 아닙니다.목록에 가능한 모든 목록의 조합 만들기

[1,2,3],[4,5,6],[7,8,9] 

내가하고 싶은 모든 가능한 조합을 가지고 :

[1,2,3],[7,8,9],[4,5,6] 
[1,2,3],[4,5,6],[7,8,9] 
[7,8,9],[4,5,6],[1,2,3] 
.... 

그러나 쉬운 솔루션이 파이썬이에 대한이 나는 목록을 가지고

?

감사하고, 같은 일 개 목록 대신 3 만들 수도 있습니다 : [7,8,9,4,5,6,1,2,3]

+0

목록이 의도적으로 두 번 반복됩니까? – jamylak

+0

죄송합니다. 좋지 않아요, 변경하지 않을 것입니다. – Jasper

+0

@xienixs : 목표 게시물을 옮기지 않는 것이 가장 좋습니다. – MattH

답변

4

itertools.permutations 당신이있어 무엇인가 나는 생각한다.

>>> import itertools 
>>> l = [1,2,3],[4,5,6],[7,8,9] 
>>> list(itertools.permutations(l, len(l))) 
[([1, 2, 3], [4, 5, 6], [7, 8, 9]), 
    ([1, 2, 3], [7, 8, 9], [4, 5, 6]), 
    ([4, 5, 6], [1, 2, 3], [7, 8, 9]), 
    ([4, 5, 6], [7, 8, 9], [1, 2, 3]), 
    ([7, 8, 9], [1, 2, 3], [4, 5, 6]), 
    ([7, 8, 9], [4, 5, 6], [1, 2, 3])] 

과 함께 병합 :

>>> [list(itertools.chain(*x)) for x in itertools.permutations(l, len(l))] 

[[1, 2, 3, 4, 5, 6, 7, 8, 9], 
[1, 2, 3, 7, 8, 9, 4, 5, 6], 
[4, 5, 6, 1, 2, 3, 7, 8, 9], 
[4, 5, 6, 7, 8, 9, 1, 2, 3], 
[7, 8, 9, 1, 2, 3, 4, 5, 6], 
[7, 8, 9, 4, 5, 6, 1, 2, 3]] 
+0

완벽! 미안하지만 지금은 [1, 2, 3], [4, 5, 6], [7, 8, 9] 대신 [1, 2, 3,4, 5, 6 , 7, 8, 9]? 3 대신에 하나의 목록 만? – Jasper

+0

3의 각 조합을 한 줄로 병합 하시겠습니까? 또는 전체 라인에 순열? 당신도 그 중 하나를 할 수 있습니다. itername.permutations (l, len (l))]에서'[list (itertools.chain (* x))]를 사용하십시오. –

2
>>> from itertools import permutations 
>>> a = [[1,2,3],[4,5,6],[7,8,9]] 
>>> for permu in permutations(a,3): 
... print permu 
... 
([1, 2, 3], [4, 5, 6], [7, 8, 9]) 
([1, 2, 3], [7, 8, 9], [4, 5, 6]) 
([4, 5, 6], [1, 2, 3], [7, 8, 9]) 
([4, 5, 6], [7, 8, 9], [1, 2, 3]) 
([7, 8, 9], [1, 2, 3], [4, 5, 6]) 
([7, 8, 9], [4, 5, 6], [1, 2, 3]) 

결합 목록 reduce를 사용하여 : Python2.7에서

>>> a = [[1,2,3],[4,5,6],[7,8,9]] 
>>> for permu in permutations(a,3): 
... print reduce(lambda x,y: x+y,permu,[]) 
... 
[1, 2, 3, 4, 5, 6, 7, 8, 9] 
[1, 2, 3, 7, 8, 9, 4, 5, 6] 
[4, 5, 6, 1, 2, 3, 7, 8, 9] 
[4, 5, 6, 7, 8, 9, 1, 2, 3] 
[7, 8, 9, 1, 2, 3, 4, 5, 6] 
[7, 8, 9, 4, 5, 6, 1, 2, 3] 
+2

Dagnabbit은 "당신은 인간입니까? captcha와 8 초 만에 첫 번째 답을 놓쳤습니다. – MattH

+0

heh, 나는 그것을 얻었고, 더 쉬운 CAPTCHA를 얻었다 고 생각한다;) –

+0

광산은 그것의'S'와'$'사이의 중간에 뭔가를 가지고 있었다. – MattH

1

당신이 순열의 길이를 지정할 필요가 없습니다

>>> T=[1,2,3],[4,5,6],[7,8,9] 
>>> from itertools import permutations 
>>> list(permutations(T)) 
[([1, 2, 3], [4, 5, 6], [7, 8, 9]), ([1, 2, 3], [7, 8, 9], [4, 5, 6]), ([4, 5, 6], [1, 2, 3], [7, 8, 9]), ([4, 5, 6], [7, 8, 9], [1, 2, 3]), ([7, 8, 9], [1, 2, 3], [4, 5, 6]), ([7, 8, 9], [4, 5, 6], [1, 2, 3])] 
관련 문제