2012-11-26 16 views
11

Eventuali duplicati:
Convert an integer to binary without using the built-in bin functioncome convertire decimale alla lista binario in pitone

come faccio a convertire un numero decimale in una lista binario.

Per esempio, come faccio a cambiare 8 in [1,0,0,0]

+1

ho provato questo: binario = 0 mentre num = 0: bit = num% 2 binario = bit + (10 * binario) num = num/2 binario = [binario] ritorno binario ma non mi da virgole tra i numeri e non aggiunge sempre gli zeri. – booboboobobob

+0

Che cosa hai provato? Potresti voler esaminare i documenti python per la funzione 'bin'. – Yuushi

+0

Voglio farlo senza quella funzione se posso – booboboobobob

risposta

16

Probabilmente si può utilizzare la funzione interna bin funzione di:

bin(8) #'0b1000' 

per ottenere l'elenco:

[int(x) for x in bin(8)[2:]] 

Anche se sembra che ci sia probabilmente un modo migliore ...

+1

Affidarsi a dettagli di rappresentazione di stringa e passare da un intero a una stringa e quindi a un elenco sembra .... non ottimale. – slacy

2

Nello spirito di voi r tentativo originale:

binary = [] 
while num != 0: 
    bit = num % 2 
    binary.insert(0, bit) 
    num = num/2 
+2

Sarebbe meglio per '.append()' i bit poi '.reverse()' alla fine dell'elenco invece di 'insert'ing all'inizio della lista. – Tim

7

Prova questo:

>>> list('{0:0b}'.format(8)) 
['1', '0', '0', '0'] 

Edit - Ops, si voleva interi:

>>> [int(x) for x in list('{0:0b}'.format(8))] 
[1, 0, 0, 0] 

Un'altra modifica - versione

di mgilson è un po ' bit più veloce:

$ python -m timeit "[int(x) for x in list('{0:0b}'.format(8))]" 
100000 loops, best of 3: 5.37 usec per loop 
$ python -m timeit "[int(x) for x in bin(8)[2:]]" 
100000 loops, best of 3: 4.26 usec per loop 
Problemi correlati