1

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

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

提前致谢!

4

5 回答 5

6

要执行您真正要求的操作,您应该转换为整数,加一,然后改回二进制。

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

于 2012-05-20T11:30:46.760 回答
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
于 2012-05-20T11:33:49.087 回答
2

使用 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']
于 2012-06-02T17:03:21.977 回答
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:]改用。

于 2012-05-20T12:11:53.350 回答
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
于 2020-03-06T07:51:50.870 回答