<p>我想找到一个干净和聪明的方法(在python中)来找到1和0sx字符长的字符串的所有排列。理想情况下,这将是快速的,不需要做太多的迭代。。。</p>
<p>所以,对于x=1,我想要:
['0','1']
x=2
['00','01','10','11']</p>
<p>等等。。</p>
<p>现在我有了这个,它很慢而且看起来不雅:</p>
<pre><code> self.nbits = n
items = []
for x in xrange(n+1):
ones = x
zeros = n-x
item = []
for i in xrange(ones):
item.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>(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]
</code></pre>
<p>对于这样简单的事情,不必过于聪明:</p>
<pre><code>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))
</code></pre>