python - 添加字符在前面添加一个字符

标签 python algorithm

我要实现的是一个将字符串递增一个字符的函数,例如:

'AAA' + 1 = 'AAB'
'AAZ' + 1 = 'ABA'
'ZZZ' + 1 = 'AAAA'

我已经为前两种情况实现了功能,但是对于第三种情况我想不出任何解决方案。

这是我的代码:

def new_sku(s):
    s = s[::-1]
    already_added = False
    new_sku = str()

    for i in s:
        if not already_added:
            if (i < 'Z'):
                already_added = True
            new_sku += chr((ord(i)+1)%65%26 + 65)
        else:
            new_sku += i

    return new_sku[::-1]

有什么建议吗?

最佳答案

如果你正在处理 bijective numeration ,那么你可能有(或应该有)函数来转换成双射表示或从双射表示转换;只需转换为整数、增加它,然后再转换回去,就会容易得多:

def from_bijective(s, digits=string.ascii_uppercase):
    return sum(len(digits) ** i * (digits.index(c) + 1)
               for i, c in enumerate(reversed(s)))

def to_bijective(n, digits=string.ascii_uppercase):
    result = []
    while n > 0:
        n, mod = divmod(n - 1, len(digits))
        result += digits[mod]
    return ''.join(reversed(result))

def new_sku(s):
    return to_bijective(from_bijective(s) + 1)

关于python - 添加字符在前面添加一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17965480/

相关文章:

python - 具有昂贵计算的列表理解

python - 从缺失值大于 5 的行中删除缺失值,然后打印每列中缺失值的百分比

用图表示的算法问题

python - ret = torch._C._nn.nll_loss(input, target, weight, _Reduction.get_enum(reduction), ignore_index) 抛出 IndexError : Target 42 is out of bounds

python - 如何在 iPad 上使用 Python 就像在 PC 上工作一样?

javascript - 算法 - 计算范围内的陷波值

java - 如何实现动态选择?

java - 错误 : Divisible numbers code in java

python - 在函数调用中使用 * 运算符

algorithm - Mergesort 运行时间 BigO