2016-06-02 8 views
2

私の無知を許してください。私は現時点で脳のおならを持っており、解決策を思い付くことができません。私が[1, 1, 0, 0]のリストを持っているとしましょう。すべての可能性を生成せずにリストバイナリ値の一意の置換を見つける

from itertools import permutations 

set([''.join(x) for x in list(permutations('0011', 4))]) 

しかし、これは全体の順列を計算して、重複を破棄:この作品

['0110', '0011', '0101', '1100', '1010', '1001'] 

:私のような、正確に2、1と2つのゼロを持っているすべての4桁の二進数を、計算したいです。意味は、それは24回計算されますが、私は6だけ必要です。コレクションが[1, 1, 1, 1, 0, 0, 0, 0]であれば、はるかに重要です。

これは非常に簡単ですが、私はそれの周りに私の頭を包むことはできません。

+1

[DOC](https://docs.python.org/2/library/itertools.html#itertools.permutations)は、明示的に要素が位置しない値に基づいて一意に扱われることを言います。ですから、 'permutations()'を使ってもオプションではないようです。 – SilentMonk

+0

@SilentMonkだから、私は尋ねた。順列はここでは有用ではありません。 – norbertpy

+1

@norbertpy、3ktで共有されているのは答えです。 – SilentMonk

答えて

4

使用itertools.combinations()は、それらの位置を使用して数字を構築し、その後、あなたのもののためにすべての可能な位置を見つける:

def binary(length=4, ones=2): 
    result = [] 
    for positions in combinations(range(length), ones): 
     result.append("".join("1" if _ in positions else "0" for _ in range(length))) 
    return result 

結果:

In [9]: binary() 
Out[9]: ['1100', '1010', '1001', '0110', '0101', '0011'] 

In [10]: binary(5) 
Out[10]: 
['11000', '10100', '10010', '10001', '01100', '01010', '01001', '00110', '00101', '00011'] 

In [11]: binary(4,1) 
Out[11]: ['1000', '0100', '0010', '0001'] 

In [12]: binary(4,4) 
Out[12]: ['1111'] 
+0

これはすばらしい答えです - >重複した質問 –

+0

WOWで見られませんでした。おとこ!ばっちり成功。一部の人々はちょうどスマートです。どうもありがとう。 – norbertpy

+0

私はこのアプローチをより一般的な問題に取り組むために拡張できると考えています。どういうわけか、これがコンビナトリアル問題であるという簡潔な声明があります。 –

3

この投稿は少し遅れています。
@Tim Pietzckerの答えは優れていますが、内部の1つのループは非常に難しいので、消化するのは難しいです。

私は簡単な方法で、同じ約4-7倍速く書く。

def binary(length=4, ones=2): 
    result = [] 
    rr = ['0'] * length ## initialize empty list with ZEROS of given length 
    for c in itertools.combinations(range(length), ones): 
     r = rr[:] ## create a copy of initialized list 
     for x in c: 
      r[x] = '1' ## Change ZERO to ONE based on different combinations of positions 
     result.append("".join(r)) 
    return result 
+0

それは良い考えです。 –

関連する問題