1

2 進数を表す文字列を、別の 2 進数までインクリメントするにはどうすればよいでしょうか。(たとえば、while ループで使用するため)。

たとえば、「0000」で開始し、15 インクリメントした後、「1111」に到達する必要があります (つまり、「0000」、「0001」、「0010」、...、「1111」)。最初は、この問題は非常に単純に見えましたが、私が思いついた唯一の解決策は非常にばかげていました (pythonic ではない、と言う人もいるかもしれません)。誰かアドバイスはありますか?

前もって感謝します!

4

5 に答える 5

6

文字通り要求したことを行うには、整数に変換し、1 を加算してから、バイナリに戻す必要があります。

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

This is simple to do with bin() and 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

Or you can put the values in a list with a comprehension:

>>> [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 に答える