在python中增加二进制数

时间:2012-05-20 11:28:47

标签: python binary

我想知道,如何增加表示二进制数的字符串,一直到另一个二进制数? (例如,用于while循环)。

例如我从“0000”开始,在15个inc之后,我应该达到“1111”(换句话说:“0000”,“0001”,“0010”,......,“1111”)。起初这个问题看起来很简单,但我能想出的唯一解决方案是非常荒谬的(不是pythonic,有些人可能会说)。有没有人有建议?

提前致谢!

5 个答案:

答案 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