我想知道,如何增加表示二进制数的字符串,一直到另一个二进制数? (例如,用于while循环)。
例如我从“0000”开始,在15个inc之后,我应该达到“1111”(换句话说:“0000”,“0001”,“0010”,......,“1111”)。起初这个问题看起来很简单,但我能想出的唯一解决方案是非常荒谬的(不是pythonic,有些人可能会说)。有没有人有建议?
提前致谢!
答案 0 :(得分:5)
要按字面意思要求你做的事情应该转换为整数,添加一个,然后改回二进制。
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
答案 1 :(得分:3)
>>> 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
答案 2 :(得分:1)
使用默认函数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:]
代替。
答案 3 :(得分:1)
这与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']
答案 4 :(得分:0)
如果只想使用字符串:
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