如何在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