python3 整數的10進制變換成其他進制

背景:

目的是:pandas數據框df中的列序號轉換爲excel中的列標題'A','AA','AAA'

百度找了一下,看了其中幾個,都是前面個位'A',十位'AA'可以,到了百位'AAA'就出問題,所以自己琢磨了一下,給出以下的解決辦法:

def index2name(num): # num = 26
    """# 餘數是 末尾字母 ,除法結果是剩下的高位"""
    # 26字母列表
    ABC = list(map(lambda x: chr(x), range(ord('A'), ord('Z') + 1))) 
    # 個位的字母
    L = [ ABC[ num % 26 ] ]
    # 其他十位百位千位類推
    i = num // 26
    while i > 0:
        L.append( ABC[ (i-1) % 26 ] )
        i = (i-1) // 26
    # 最後把字母倒敘輸出
    return "".join(L.reverse())

for i in range(702):
    print(i,index2name(i))

推廣開來,只要函數增加一個參數用來輸入你需要的進制列表(上面函數的ABC參數)那麼就可以變成10進制變換N進制

def ten2N(num,abc): # num = 1
    """
    num 是待變換的10進制整數
    abc 是進制的元素 是字符串 例如:abc = "1a2b3c" 代表6進制
    """
    N = len(abc)
    L = [ abc[ num % N ] ]
    i = num // N
    while i > 0:
        L.append( abc[ (i-1) % N ] )
        i = (i-1) // N
    L.reverse()
    return "".join(L)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章