1. 程式人生 > 程式設計 >Python 排序最長英文單詞鏈(列表中前一個單詞末字母是下一個單詞的首字母)

Python 排序最長英文單詞鏈(列表中前一個單詞末字母是下一個單詞的首字母)

使用遞迴實現

words = ['giraffe','elephant','ant','tiger','racoon','cat','hedgehog','mouse']
def get_results(_start,_current,_seen):
 if all(c in _seen for c in words if c[0] == _start[-1]):
  yield _current
 else:
   for i in words:
    if i[0] == _start[-1]:
     yield from get_results(i,_current+[i],_seen+[i])

new_d = [list(get_results(i,[i],[]))[0] for i in words]
final_d = max([i for i in new_d if len(i) == len(set(i))],key=len)

輸出:

['hedgehog','giraffe','racoon']

工作原理類似於廣度優先搜尋,因為只要當前值之前沒有被呼叫,get_results函式就會繼續遍歷整個列表。函式已經查詢過的值被新增到_seen列表中,最終停止遞迴呼叫流。這個解決方案也會忽略重複的結果,

words = ['giraffe','ning','mouse',]
new_d = [list(get_results(i,key=len)

輸出:

['ant','elephant']

到此這篇關於Python 排序最長英文單詞鏈(列表中前一個單詞末字母是下一個單詞的首字母)的文章就介紹到這了,更多相關Python 排序最長英文單詞鏈內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!