2012-01-27 6 views
6

私はリスト[2,3,4]を持っています。リスト内の要素の可能なすべてのシーケンスを見つけるにはどうすればよいですか? ため、出力は次のようになります。 [2,3,4] [2,4,3] [3,2,4] [3,4,2] [4,2,3] [4 1,3,2]リスト内の要素のすべてのシーケンスを見つける方法は?

+0

が重複する可能性:これを試して次に

print len(unique_perms(elems)) 

をちょうどあなたが知っているのでPythonのリスト](http://stackoverflow.com/questions/104420/how-to-generate-all-permutations-of-a-list-in-python) –

答えて

21

あなたは簡単にitertools.permutations()を使用してこれを行うことができます。

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

そして、あなたはリストの代わりにタプルを必要とするいくつかの理由であれば:あなたはpermutatiを探している

>>> map(list, permutations([2, 3, 4])) 
[[2, 3, 4], [2, 4, 3], [3, 2, 4], [3, 4, 2], [4, 2, 3], [4, 3, 2]] 
+3

希望OPリストにはすべてのユニークな要素があります。 – Droogans

+1

http://docs.python.org/library/itertools.html#itertools.permutationsへのリンクを追加する場合がありますか? –

5

アドオンは、このようなものは動作するはずです:

データを除いて素晴らしい抽選プログラムの開始は次のようにフォーマットされます
import itertools 
itertools.permutations([2,3,4]) 
2

ist(permutations([2, 3, 4],[7,2,5],[8,1,4,9])) 

問題は、最初のグループは最初の数字を作成するために使用されていることです出力順列が異なるだけということ3つの数字の組になり列のみ secoundは、2列のためであり、3は第3

するためのものである

1
def unique_perms(elems): 
    """returns non-duplicate permutations 
     if duplicate elements exist in `elems` 
    """ 
    from itertools import permutations 
    return list(set(permutations(elems))) 

しかし、あなたはこのような何かをやっている場合:すべての順列を生成する[方法の

def fac(n): 
    """n!""" 
    if n == 1: return n 
    return n * fac(n -1) 

def unique_perm_count(elems) 
    n = len(elems) 
    return fac(2 * n)/fac(n) ** 2 
関連する問題