背景:
目的是:pandas数据框df中的列序号转换为excel中的列标题'A','AA','AAA'
百度找了一下,看了其中几个,都是前面个位'A',十位'AA'可以,到了百位'AAA'就出问题,所以自己琢磨了一下,给出以下的解决办法:
def index2name(num): # num = 26
"""# 余数是 末尾字母 ,除法结果是剩下的高位"""
# 26字母列表
ABC = [chr(i) for i in 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="abc123"): # num = 1
"""
num 是待变换的10进制整数
abc 是进制的元素 是字符串 例如:abc = "abc123" 代表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)
abc = "123abc"
for i in range(38):
print(i,ten2N(i,abc))