Biểu thức như map(int, list(bin((1<<8)+x))[-4:])
sẽ cung cấp cho bạn 4 bit thấp của một số, dưới dạng danh sách. (Chỉnh sửa: Biểu mẫu sạch hơn làmap(int,bin(x)[2:].zfill(4))
; xem bên dưới.) Nếu bạn biết số lượng bit bạn muốn hiển thị, hãy thay thế số 4 (trong số [-4:]
) bằng số đó; và làm cho số 8 (trong số (1<<8)
) một số lớn hơn nếu cần. Ví dụ:
>>> x=0b0111
>>> map(int,list(bin((1<<8)+x))[-4:])
[0, 1, 1, 1]
>>> x=37; map(int,list(bin((1<<8)+x))[-7:])
[0, 1, 0, 0, 1, 0, 1]
>>> [int(d) for d in bin((1<<8)+x)[-7:]]
[0, 1, 0, 0, 1, 0, 1]
Ví dụ cuối cùng ở trên cho thấy thay thế cho việc sử dụng bản đồ và danh sách. Các ví dụ sau đây cho thấy một hình thức hơi sạch hơn để có được số 0 hàng đầu. Trong những hình thức, thay thế số lượng tối thiểu mong muốn của các bit ở vị trí của 8.
>>> x=37; [int(d) for d in bin(x)[2:].zfill(8)]
[0, 0, 1, 0, 0, 1, 0, 1]
>>> x=37; map(int,bin(x)[2:].zfill(8))
[0, 0, 1, 0, 0, 1, 0, 1]
>>> x=37; map(int,bin(x)[2:].zfill(5))
[1, 0, 0, 1, 0, 1]
>>> x=37; map(lambda k:(x>>-k)&1, range(-7,1))
[0, 0, 1, 0, 0, 1, 0, 1]
'0b0111 == 0b111' vậy vấn đề là gì? Nếu bạn cần danh sách có độ dài cố định, thì chỉ cần tack số tiền thích hợp là 0 vào đầu. –