![](/img/trans.png)
[英]How can I get the next string, in alphabetical DESCENDING order, in Python?
[英]How can I get the next string, in alphanumeric ordering, in Python?
我需要一個給出字符串的簡單程序,在字母數字排序中返回下一個(或者只是字母順序)。
f("aaa")="aab"
f("aaZ")="aba"
等等。
在其中一個模塊中是否有這個功能?
我不認為有這樣做的內置功能。 以下應該有效:
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
的是一個更長的時間。
答案在你如何將這個從Perl翻譯成Python? 足夠? 不是100%你要問的,但關閉......
一個不同的,更長的,但也許更具可讀性和靈活性的解決方
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)。
很糟糕,python沒有ruby所擁有的東西: String#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
不是很好。 有點適合我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.