N位二进制数
为了生成 n
位的二进制数字,我做了这个,想得到最多 16 个二进制数字。
n = 6 # for 6 digits
for i in xrange(16):
b = bin(i)[2:]
l = len(b)
b = str(0) * (n - l) + b
print b
结果是这样的
000000
000001
000010
000011
000100
000101
000110
000111
001000
001001
001010
001011
001100
001101
001110
001111
但我想要的是得到这些值,而不需要在前面加一串 0
。
有没有人能帮我解决这个问题?
谢谢!
5 个回答
-1
n = 4 for i in range(0, 2**n): b = bin(i)[2:] print(str(b).zfill(n))
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
n = 6
000000
000001
000010
000011 .... 111101
111110
111111
-1
通过这段代码,你可以生成从0到n的二进制数字列表,时间复杂度是O(2^int(log(n)))。
import math
num=25
n=int(math.log(num,2))
x=['0','1']
for i in range(1,int(n)+1):
for j in range(0,2**i):
x.append('1'+x[j])
x[j]='0'+x[j]
print(x[0:num])
输出结果::
['00000', '00001', '00010', '00011', '00100', '00101', '00110', '00111', '01000', '01001', '01010', '01011', '01100', '01101', '01110', '01111', '10000', '10001', '10010', '10011', '10100', '10101', '10110', '10111', '11000']
希望这对你有帮助。
3
你可以把列表推导和位转换结合起来,像这样使用:
def binary_list(n):
return ['{:0{}b}'.format(i, n) for i in range(n*n-1)]
print(binary_list(3)) -->
['000', '001', '010', '011', '100', '101', '110', '111']
或者,如果你想把每个数字存放在自己的位置上,可以这样做:
def binary_list(n):
return [[int(j) for j in '{:0{}b}'.format(i, n)] for i in range(n*n-1)]
print(binary_list(3))--->
[[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1], [1, 0, 0], [1, 0, 1], [1, 1, 0], [1, 1, 1]]
8
如果你在问有没有其他的方法:
n = 6
for i in xrange(16):
b = bin(i)[2:].zfill(n)
print b
str.zfill(n)
这个方法会在字符串的左边加上零,直到字符串的长度至少达到 n
。
如果你只是想去掉前面的零:
for i in xrange(16):
b = bin(i)[2:]
print b
9
去掉那条填充 0
的线。
n = 6
for i in xrange(16):
b = bin(i)[2:]
l = len(b)
#b = str(0) * (n - l) + b # <--------
print b
如果你是想在没有字符串操作符的情况下填充数字,可以使用 str.format
,配合 b
类型格式:
n = 6
for i in xrange(16):
print '{:0{}b}'.format(i, n)
# OR print '{:06b}'.format(i)
# OR print '{:b}'.format(i) if you want no leading 0s.