二进制序列x位长的所有置换

2024-04-29 16:36:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我想找到一个干净和聪明的方法(在python中)来找到1和0sx字符长的字符串的所有排列。理想情况下,这将是快速的,不需要做太多的迭代。。。

所以,对于x=1,我想要: ['0','1'] x=2 ['00','01','10','11']

等等。。

现在我有了这个,它很慢而且看起来不雅:

    self.nbits = n
    items = []
    for x in xrange(n+1):
        ones = x
        zeros = n-x
        item = []
        for i in xrange(ones):
            item.append(1)
        for i in xrange(zeros):
            item.append(0)
        items.append(item)
    perms = set()
    for item in items:
        for perm in itertools.permutations(item):
            perms.add(perm)
    perms = list(perms)
    perms.sort()
    self.to_bits = {}
    self.to_code = {}
    for x in enumerate(perms):
        self.to_bits[x[0]] = ''.join([str(y) for y in x[1]])
        self.to_code[''.join([str(y) for y in x[1]])] = x[0]

Tags: toinselfforoneszeroscodeitems
2条回答

对于这样简单的事情,不必过于聪明:

def perms(n):
    if not n:
        return

    for i in xrange(2**n):
        s = bin(i)[2:]
        s = "0" * (n-len(s)) + s
        yield s

print list(perms(5))

您可以使用^{}来执行此操作。

import itertools
def binseq(k):
    return [''.join(x) for x in itertools.product('01', repeat=k)]

相关问题 更多 >