[英]find the common superstring from given list of strings in python
我在輸入中輸入了字符串
'ATTAGACCTG', 'CCTGCCGGAA', 'AGACCTGCCG', 'GCCGGAATAC'
在輸出中,我需要最短的公共超級字符串。
ATTAGACCTGCCGGAATAC
我已經使用lambda表達式完成了它,但是我希望它沒有lambda表達式。
from itertools import *
print min((reduce(lambda s,w:(w+s[max(i*(s[:i]==w[-i:])for i in range(99)):],s)[w in s],p)
for p in permutations(input())),key=len)
我在未使用lambda表達式的情況下進行了嘗試,但輸出錯誤。
from itertools import permutations
def solve(*strings):
"""
Given a list of strings, return the shortest string that contains them all.
"""
return min((simplify(p) for p in permutations(strings)), key=len)
def prefixes(s):
"""
Return a list of all the prefixes of the given string (including itself), in ascending order (from shortest to longest).
"""
return [s[:i+1] for i in range(len(s))]
return [(i,s[:i+1]) for i in range(len(s))][::-1]
def simplify(strings):
"""
Given a list of strings, concatenate them wile removing overlaps between
successive elements.
"""
ret = ''
for s in strings:
if s in ret:
break
for i, prefix in reversed(list(enumerate(prefixes(s)))):
if ret.endswith(prefix):
ret += s[i+1:]
break
else:
ret += s
return ret
print solve('ATTAGACCTG', 'CCTGCCGGAA', 'AGACCTGCCG', 'GCCGGAATAC')
我的錯誤輸出:
ATTAGACCTGCCGGAA
看起來好像
if s in ret:
break
應該
if s in ret:
continue
認為可以解決問題。
另外,第二個return語句是多余的-難道它不模擬reversed(list(enumerate(prefixes(s))))
嗎?
最后,我想我更喜歡您的初始map-reduce解決方案!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.