背景:
目的是: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)