Para generar números binarios en n dígito
Hice esto para obtener hasta 16 números binarios.

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

Resulta así

000000
000001
000010
000011
000100
000101
000110
000111
001000
001001
001010
001011
001100
001101
001110
001111

Pero lo que quiero es obtener estos valores sin agregar una serie de 0s en el prefijo.
¿Alguien puede ayudarme con esto?
Gracias

5
singhiskng 31 ago. 2014 a las 11:08

3 respuestas

La mejor respuesta

Elimine la línea que rellena 0 s.

n = 6
for i in xrange(16):
    b = bin(i)[2:]
    l = len(b)
    #b = str(0) * (n - l) + b  # <--------
    print b

Si te refieres a un número de relleno sin un secuenciador de cadena, usa str.format con b formato de tipo:

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.
7
falsetru 31 ago. 2014 a las 07:19

Si está pidiendo un método diferente:

n = 6
for i in xrange(16):
    b = bin(i)[2:].zfill(n)
    print b

str.zfill(n) rellena la cadena con ceros a la izquierda para que tenga al menos la longitud n.


Si simplemente no quieres los ceros iniciales:

for i in xrange(16):
    b = bin(i)[2:]
    print b
5
Scorpion_God 11 abr. 2016 a las 01:57

Mediante este código, puede generar una lista de números binarios hasta n en O (2 ^ int (log (n))) complejidad de tiempo.


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])

Salida::

['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']

Espero que esto ayude

-1
Anurag 29 ago. 2019 a las 10:39