2012-11-26 40 views
11

thể trùng lặp:
Convert an integer to binary without using the built-in bin functionLàm thế nào để chuyển đổi số thập phân vào danh sách nhị phân trong python

làm thế nào để chuyển đổi một số thập phân vào một danh sách nhị phân.

Ví dụ, làm thế nào để tôi thay đổi 8 vào [1,0,0,0]

+1

Tôi cố gắng này: nhị phân = 0 khi num = 0: chút = num% 2 nhị phân = chút + (10 * nhị phân) num = num/2 nhị phân = [nhị phân] trở lại nhị phân nhưng nó không cho tôi dấu phẩy giữa các số và không phải lúc nào cũng thêm số 0. – booboboobobob

+0

Bạn đã thử những gì? Bạn có thể muốn xem các tài liệu python cho hàm 'bin'. – Yuushi

+0

Tôi muốn làm điều đó nếu không có chức năng đó nếu tôi có thể – booboboobobob

Trả lời

16

Bạn có thể sử dụng được xây dựng trong bin chức năng:

bin(8) #'0b1000' 

để có được danh sách:

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

Mặc dù có vẻ như có thể có một cách tốt hơn ...

+1

Dựa vào các chi tiết biểu diễn chuỗi và đi từ một số nguyên thành một chuỗi và sau đó đến danh sách có vẻ ... tối ưu. – slacy

2

Theo tinh thần của bạn r nỗ lực ban đầu:

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

Sẽ tốt hơn cho '.append()' các bit sau đó '.reverse()' danh sách ở cuối chứ không phải 'chèn' ở đầu danh sách. – Tim

7

Hãy thử điều này:

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

Edit - Rất tiếc, bạn muốn số nguyên:

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

Một biên tập - phiên bản

mgilson là một chút nhanh hơn một chút:

$ 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 
Các vấn đề liên quan