You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现整数转类Excel列名字符串函数的需求与解决方案

整数转类似Excel列名字符串的Python实现

需求说明

我需要实现一个Python函数,输入整数后返回对应的字符串,映射规则和Excel列名逻辑一致:

  • 1 → 'a'
  • 26 → 'z'
  • 27 → 'aa'
  • 50 → 'ax'
  • 70 → 'br'
    整体序列为:a, b, c……z, aa, ab……zz, aaa, aab……zzz

我的初始尝试

最开始我想用迭代生成所有可能的字母组合,直到找到第n个结果,但这个方法效率很低,而且返回的是元组列表,完全不符合预期:

from string import ascii_lowercase
import itertools
def func(n):
    c = 0
    l = []
    for size in itertools.count(1):
        for s in itertools.product(ascii_lowercase, repeat=size):
            l.append(s)
            c+=1
            if c == n:
                return l

最终解决方案

在社区朋友们的帮助下,我找到了更高效的递归解法。核心思路是通过除法和取余逐步拆解数字,重点处理26的倍数这种特殊情况(因为常规进制转换从0开始,而这里的序列是从1起步的):

# 建立1-26到a-z的映射字典
d = { n-96:chr(n) for n in range(97,123) }

def div(n):
    # 处理26的倍数且大于26的情况,需要把商减1再递归
    if ((n%26) == 0 and n>26):
        return func(n//26 - 1)
    # 商小于等于0时返回空字符串
    elif (n//26) <= 0:
        return ''
    # 单独处理n=26的边界情况
    elif n == 26:
        return 'z'
    # 商在1-26范围内,直接返回对应字母
    elif (n//26) in d:
        return d[n//26]
    # 商大于26时继续递归拆解
    else:
        return func(n//26)

def mod(n):
    if n<=0:
        return ''
    # 26的倍数且大于26时,余数对应z
    elif ((n%26) == 0 and n>26):
        return 'z'
    elif (n%26)<=0:
        return ''
    # 余数在1-26范围内,返回对应字母
    else:
        return d[n%26]

def func(n):
    res_div = div(n)
    res_mod = mod(n)
    return (res_div + res_mod)

这个方法不需要生成所有前置组合,通过递归逐步构建结果字符串,完美适配了从1开始的特殊进制转换逻辑,效率比初始尝试提升了很多。

内容的提问来源于stack exchange,提问作者Rohan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 15:04:10