如何在Python中获取下一个按字母数字顺序排列的字符串?
我需要一个简单的程序,给定一个字符串,它能返回下一个按字母和数字顺序排列的字符串(或者仅仅是按字母顺序排列的字符串)。
f("aaa")="aab"
f("aaZ")="aba"
然后继续。
有没有现成的模块里有这样的函数呢?
4 个回答
2
这里有一个不同的解决方案,虽然比较长,但可能更容易理解和灵活:
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进制的数字,然后把这个数字加一,再把它转换回字符串。这样,你就可以对用字母表示的值进行各种数学运算。
''minlen''这个参数控制结果会有多少位数(因为0等于a,a也等于aaaaa)。
3
在这个链接里,大家讨论的是“如何把这段代码从Perl语言转换成Python语言”。虽然这些回答可能不是完全符合你的问题,但大致上是接近的。
12
我觉得没有现成的函数可以做到这一点。下面的代码应该可以实现:
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
,那么就返回一个比原来多一个字符的全是 a
的字符串。