我想知道,如何将表示二进制数的字符串递增到另一个二进制数?(例如,用于 while 循环)。
例如,我从“0000”开始,在 15 英寸之后,我应该达到“1111”(换句话说:“0000”、“0001”、“0010”、...、“1111”)。起初这个问题看起来很简单,但我能想出的唯一解决方案非常荒谬(有些人可能会说,这不是pythonic)。有人有建议吗?
提前致谢!
要执行您真正要求的操作,您应该转换为整数,加一,然后改回二进制。
x = to_binary(int(x, 2) + 1)
您可能会发现bin
内置方法在实现时很有用to_binary
,但您需要稍微修改其输出以匹配您想要的结果。
但是,如果可能不来回转换会更好:只需存储一个整数并在需要显示时将其转换为二进制。
不过,仔细阅读您的问题后,您似乎只想生成字符串'0000'
, '0001'
,'0010'
等。如果这是正确的,那么我建议使用itertools.product
.
例子:
import itertools
for x in map(''.join, itertools.product('01', repeat=4)):
print x
0000
0001
0010
...
在线查看它:ideone
>>> def increment_binary_string(s):
... return '{:04b}'.format(1 + int(s, 2))
...
>>> x = '0000'
>>> for _ in xrange(15):
... print x
... x = increment_binary_string(x)
...
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
使用 bin() 和 zfill() 很容易做到这一点。
>>> for x in range(16):
... print bin(x)[2:].zfill(4)
...
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
或者,您可以将值放在一个带有理解的列表中:
>>> [bin(x)[2:].zfill(4) for x in range(16)]
['0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111', '1000', '1001', '1010', '1011', '1100', '1101', '1110', '1111']
使用默认函数bin()简短而简单:
>>> for i in range(15):
... print bin(i)
...
0b1
0b10
0b11
0b100
0b101
0b110
0b111
0b1000
0b1001
0b1010
0b1011
0b1100
0b1101
0b1110
0b1111
如果您不喜欢它们以 0b 前缀开头,则可以print str(bin(i))[2:]
改用。
如果您只想使用字符串:
def increment(l):
if len(l) == 0:
return l
if l[-1] == '0':
l = l[:-1] + '1'
else:
l = increment(l[:-1]) + '0'
return l