python - 在不生成所有可能性的情况下找到列表二进制值的唯一排列

标签 python permutation

原谅我的无知。我现在脑袋放屁,无法想出解决办法。假设我有一个 [1, 1, 0, 0] 列表。我想计算正好有两个 1 和两个零的所有四位二进制数,例如:

['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] 就更重要了。

这应该很容易,但我就是想不通。

最佳答案

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

关于python - 在不生成所有可能性的情况下找到列表二进制值的唯一排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37582782/

相关文章:

list - 如何在递归置换函数中一个一个地返回置换列表元素?

python - 如何检查 Pandas 数据框中是否存在具有特定列值的行

Python计算一个表的所有可能组合

c++ - 如何删除此代码的重复排列?

c - 如何为字符串生成所有可能的(n 长度)子集?

c# - 解决条件填充难题的排列/算法

Python datetime 工作日数字代码 - 动态?

python - HTTP实时音频流服务器

python - 连接到数据库后执行原始 SQL

python - (python) 从 python 脚本中发出 bash 命令 (alla perl system($cmd))