我想知道,我如何增加一個代表二進制數字的字符串,直到另一個二進制數字? (例如,用於while循環)。例如我從「0000」開始,在15個incs之後,我應該達到「1111」(換句話說:「0000」,「0001」,「0010」,...,「1111」)。起初這個問題看起來非常簡單,但我能想出的唯一解決方案非常荒謬(不是pythonic,有人可能會這麼說)。有沒有人有建議?在python中增加一個二進制數字
在此先感謝!
我想知道,我如何增加一個代表二進制數字的字符串,直到另一個二進制數字? (例如,用於while循環)。例如我從「0000」開始,在15個incs之後,我應該達到「1111」(換句話說:「0000」,「0001」,「0010」,...,「1111」)。起初這個問題看起來非常簡單,但我能想出的唯一解決方案非常荒謬(不是pythonic,有人可能會這麼說)。有沒有人有建議?在python中增加一個二進制數字
在此先感謝!
做你從字面上問你要轉換爲整數,加一個,又變回爲二進制。
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
多麼巧妙的解決方案!我永遠不會想出這個。我一再對Python所提供的東西感到驚訝。 謝謝=] – Py42
>>> 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():
>>> 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:]
。
這是簡單的有彬()和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']
「0002」 ...嗯...什麼?! –
是否有一個原因,你想從字符串開始,而不是爲了顯示而轉換爲字符串的整數? – Levon
@Mark Byers我對此沒有合理的解釋。捂臉。 – Py42