我發現了這個問題的幾個答案,但它不是我想要做的。在列表中列出所有可能的列表組合
當我有一個列表:
[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]
....
但有一個簡單的解決方案,這在Python?
感謝了,是不是也可以創建1名列表,而不是像3: [7,8,9,4,5,6,1,2,3]
我發現了這個問題的幾個答案,但它不是我想要做的。在列表中列出所有可能的列表組合
當我有一個列表:
[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]
....
但有一個簡單的解決方案,這在Python?
感謝了,是不是也可以創建1名列表,而不是像3: [7,8,9,4,5,6,1,2,3]
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]]
完美!對不起,但現在我正在使用它也可以取代[1,2,3],[4,5,6],[7,8,9]創建[1,2,3,4,5,6 ,7,8,9]?只有一個列表而不是3個? – Jasper
你的意思是將3的每個組合合併成一行?或排列在整個行?你也可以做。如果你想合併3個memeber變換,在itertools.permutations(l,len(l))]' –
>>> 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
:
>>> 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]
在Python2.7你不需要指定排列的長度
>>> 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])]
該列表是否故意重複兩次? – jamylak
對不起,我會改變它 – Jasper
@xienixs:最好不要移動目標文章,你已經有問題的答案,因爲它剛剛站起來。 – MattH