gpt4 book ai didi

python - 从 python 中给定的字符串列表中查找公共(public)超字符串

转载 作者:太空宇宙 更新时间:2023-11-03 17:52:06 32 4
gpt4 key购买 nike

我的输入中有字符串

'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)))) 吗?

最后,我想我更喜欢你最初的映射减少解决方案!

关于python - 从 python 中给定的字符串列表中查找公共(public)超字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28966929/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com