查找列表二进制值的唯一排列而不会产生所有可能性

山姆·R。

原谅我的无知。我目前有脑筋,无法提出解决方案。假设我有一个清单[1, 1, 0, 0]我想计算正好具有两个1和两个0的所有四位二进制数,例如:

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

这有效:

from itertools import permutations

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

但这会计算整个排列,然后丢弃重复项。意思是,它计算24次,但我只需要6次[1, 1, 1, 1, 0, 0, 0, 0]如果集合为,则意义更为重大

这应该很容易,但是我无法将其包裹住。

Pietzcker团队

使用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']

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章