如何在Python中以字母数字顺序获取下一个字符串?
我需要一个简单的程序,给定一个字符串,返回给我下一个字母数字顺序(或只是字母顺序) 等等如何在Python中以字母数字顺序获取下一个字符串?,python,string,Python,String,我需要一个简单的程序,给定一个字符串,返回给我下一个字母数字顺序(或只是字母顺序) 等等 其中一个模块中已经有此功能了吗?答案是否足够?不是100%符合您的要求,而是关闭…我认为没有内置函数来完成此操作。以下方面应起作用: 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
其中一个模块中已经有此功能了吗?答案是否足够?不是100%符合您的要求,而是关闭…我认为没有内置函数来完成此操作。以下方面应起作用:
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
字符串。一个不同的、更长的、但可能更可读和灵活的解决方案:
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
def toval(s):
“”“将'azz'字符串转换为数字”“”
v=0
对于s.lower()中的c:
v=v*26+ord(c)-ord('a')
返回v
def tostr(v,最小值=0):
“”“将数字转换为'azz'字符串”“”
s=“”
当v或len小于minlen时:
s=chr(ord('a')+v%26)+s
v/=26
返回s
def next(s,最小值=0):
返回tostr(toval(s)+1,minlen)
s=“”
对于范围(100)内的i:
s=下一个(s,5)
印刷品
将字符串转换为数字,其中每个字母表示以26为底的数字,将数字增加1,然后将数字转换回字符串。通过这种方式,您可以对表示为字符串的值执行任意数学运算
“minlen”参数控制结果的位数(因为0==a==aaaaa)。糟糕透顶,python没有ruby所拥有的:
String 35; next
所以这里有一个糟糕的解决方案来处理字母数字字符串:
def next_string(s):
a1 = range(65, 91) # capital letters
a2 = range(97, 123) # letters
a3 = range(48, 58) # numbers
char = ord(s[-1])
for a in [a1, a2, a3]:
if char in a:
if char + 1 in a:
return s[:-1] + chr(char + 1)
else:
ns = next_string(s[:-1]) if s[:-1] else chr(a[0])
return ns + chr(a[0])
print next_string('abc') # abd
print next_string('123') # 124
print next_string('ABC') # ABD
# all together now
print next_string('a0') # a1
print next_string('1a') # 1b
print next_string('9A') # 9B
# with carry-over
print next_string('9') # 00
print next_string('z') # aa
print next_string('Z') # AA
# cascading carry-over
print next_string('a9') # b0
print next_string('0z') # 1a
print next_string('Z9') # AA0
print next_string('199') # 200
print next_string('azz') # baa
print next_string('Zz9') # AAa0
print next_string('$a') # $b
print next_string('$_') # None... fix it yourself
不太好。有点适合我。库通常公开函数,因为它们更有用,而不是因为它们微不足道。如果有库支持这个确切的函数,我会感到惊讶,因为规范有点武断,我想不出有这样一个函数的任何通用用例。好的,通用用例将字符串置于字母表之上,字母表作为列表。然后给继任者。你认为这无关紧要吗?好吧,有各种各样的代数是由后继函数和本原函数生成的。例如,像naturals一样,我认为这些示例并不适用于按字母顺序给出下一个字符串的函数。按照字母顺序,它应该返回f(aaa)=aaaa和f(aaZ)=aaZa。谢谢。工作完美。(事实上,准确地说,为了防止以后有人使用它,这只通过小写字母。但对我来说是可以的。干杯,PietroSucks没有用于此的本机python方法:
def next_string(s):
a1 = range(65, 91) # capital letters
a2 = range(97, 123) # letters
a3 = range(48, 58) # numbers
char = ord(s[-1])
for a in [a1, a2, a3]:
if char in a:
if char + 1 in a:
return s[:-1] + chr(char + 1)
else:
ns = next_string(s[:-1]) if s[:-1] else chr(a[0])
return ns + chr(a[0])
print next_string('abc') # abd
print next_string('123') # 124
print next_string('ABC') # ABD
# all together now
print next_string('a0') # a1
print next_string('1a') # 1b
print next_string('9A') # 9B
# with carry-over
print next_string('9') # 00
print next_string('z') # aa
print next_string('Z') # AA
# cascading carry-over
print next_string('a9') # b0
print next_string('0z') # 1a
print next_string('Z9') # AA0
print next_string('199') # 200
print next_string('azz') # baa
print next_string('Zz9') # AAa0
print next_string('$a') # $b
print next_string('$_') # None... fix it yourself