[英]How can I get the next string, in alphabetical DESCENDING order, in Python?
我需要一個簡單的python程序,該程序在列表中查找字符串,如果找不到,則會在字母降序中生成下一個字符串 。我的意思是,如果找不到``abz'' ,它將生成ac刪除到達'z'時的最后一個字符。
另一個例子:
我有一個列表,例如:list = ['allena','allend','alphosis','alpinist','alternative']
假設我不知道列表中有什么。
該功能后發現allend在列表中,將檢查丙二烯以allenz,並alleo到allez后后全部以allz ......從而通過字符串中移除最后一個字符每次它是“Z” ....功能會達到alp和alt ...直到達到a
該函數將更改字符串的最后一個字符,並在其變為“ z”時將其刪除,直到僅保留第一個字符為止。
感謝大伙們!
這是使用過濾器函數過濾您的問題的一種方法,該函數消耗了規范中生成的單詞列表。
findall = lambda pred, word: filter(pred, words_gen(word))
def words_gen(word):
yield word
while True:
lastchr = word[-1]
if len(word) == 1 and lastchr == 'z':
break
new_lastchr = chr(97 + ((ord(lastchr) - 96) % 26))
if lastchr == 'z':
word = word[:-2] + new_lastchr
else:
word = word[:-1] + new_lastchr
yield word
def check_match(it):
def match(word):
try:
it.index(word)
except ValueError:
return False
else:
return True
return match
lst = ['allena', 'allend','alphosis','alpinist', 'alternative']
> print(list(findall(check_match(lst), 'allena')))
['allena', 'allend']
使用生成器功能!
def mygenerator(word):
while len(word) > 0:
lastletter = word[-1].lower() # get last letter
word = word[0:-1] # remove last letter
for lv in range(ord(lastletter), ord('z')+1):
letter = chr(lv)
yield word+letter
這是一個測試:
>>> print(list(mygenerator('jason')))
['jason', 'jasoo', 'jasop', 'jasoq', 'jasor', 'jasos', 'jasot', 'jasou', 'jasov', 'jasow', 'jasox', 'jasoy', 'jasoz', 'jaso', 'jasp', 'jasq', 'jasr', 'jass', 'jast', 'jasu', 'jasv', 'jasw', 'jasx', 'jasy', 'jasz', 'jas', 'jat', 'jau', 'jav', 'jaw', 'jax', 'jay', 'jaz', 'ja', 'jb', 'jc', 'jd', 'je', 'jf', 'jg', 'jh', 'ji', 'jj', 'jk', 'jl', 'jm', 'jn', 'jo', 'jp', 'jq', 'jr', 'js', 'jt', 'ju', 'jv', 'jw', 'jx', 'jy', 'jz', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
這實現了您請求的大多數邏輯。 我希望它有助於說明python多么靈活和強大。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.