python 十進位轉二進位 取得組合

如果我們在一個資料欄位中要記載一個多選的內容,例如:嗜好~~
這種欄位我們會選擇在資料欄位中用逗點分隔儲存,但是這是在我們現在這種空間很不值錢的情況下才會這樣選

很古老的前輩有一種寫法,是將每個選項轉換為二進位的位址,如果有選到就填 1 沒有填到就填 0 再將這堆值連起來後當作是二進位的數值將其轉為十進位儲存。這樣在資料欄位中就可以用一個十進位的數字代表一個複選的資料結果。


如下圖所示:

假設我們有五個選項:
0 => A
1 => B
2 => C
3 => D
4 => E
在儲存資料的時候我們就會這樣存進去到二進位的位址上變成 01101 ,也就是 13。

要將這個值由二進位轉成十進位很簡單只要把字串連在一起直接用 int(數值,2) 就可以完成
但是要反轉就麻煩一點了

n = 13
l = list(str(bin(n))[2:]) #先把值轉 2進位後去除前面的 ob 兩個字元,將字串轉成 list
l.reverse() # 反轉list
i = 0
anserList = []
for k in l:
if k == '1': # 如果位置是 1 的就記下來
anserList.append(i)
i = i+1

print(anserList)

這樣我們就可以求得答案的資料位置為 [0,2,3] 這是有被選中的位置,在自行去對應選項的內容即可


留言