如何在Python中获得下一个字符串(按字母数字顺序)?

2024-10-03 09:14:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一个简单的程序,给定一个字符串,返回给我的下一个字母数字顺序(或只是字母顺序)。在

f("aaa")="aab"
f("aaZ")="aba"

等等。在

其中一个模块中是否已经有此功能?在


Tags: 模块字符串程序功能顺序字母数字aaa
3条回答

一种不同的、更长的、但可能更具可读性和灵活性的解决方案:

def toval(s):
    """Converts an 'azz' string into a number"""
    v = 0
    for c in s.lower():
        v = v * 26 + ord(c) - ord('a')
    return v

def tostr(v, minlen=0):
    """Converts a number into 'azz' string"""
    s = ''
    while v or len(s) < minlen:
        s = chr(ord('a') + v % 26) + s
        v /= 26
    return s

def next(s, minlen=0):
    return tostr(toval(s) + 1, minlen)

s = ""
for i in range(100):
    s = next(s, 5)
    print s

将字符串转换为一个数字,其中每个字母表示以26为底的数字,将数字增加1,然后将数字转换回字符串。这样你就可以对用字母串表示的值进行任意的数学运算。在

“minlen”参数控制结果的位数(因为0==a==aaaaa)。在

How would you translate this from Perl to Python?处的答案足够吗?不是百分之百的满足你的要求,但是很接近。。。在

我不认为有一个内置函数来做这个。以下措施应该有效:

def next_string(s):
    strip_zs = s.rstrip('z')
    if strip_zs:
        return strip_zs[:-1] + chr(ord(strip_zs[-1]) + 1) + 'a' * (len(s) - len(strip_zs))
    else:
        return 'a' * (len(s) + 1)

说明:找到最后一个不是z的字符,将其递增,并将其后面的所有字符替换为a。如果整个字符串是z,则返回一个长度为1的所有a的字符串。在

相关问题 更多 >