【发布时间】:2017-11-02 18:53:00
【问题描述】:
花哨的标题:) 我有一个包含以下内容的文件:
>sequence_40
ABCDABDCABCDBACDBACDBACDBACDABDCDC
ACDCCDCABDCADCADBCACBDCABD
>sequence_41
DCBACDBACDADCDCDCABCDCACBDCBDACBDC
BCDBABABBABACDCDBCACDBACDBACDBACDC
BCDB
...
然后,我有一个函数,它返回一个字典(称为 dict),它将序列作为键返回,将字符串(组合在一行上)作为键的值返回。序列范围从 40 到 59。 我想获取一个序列字典并返回在所有序列中找到的最长的公共子序列。设法在stackoverflow上找到了一些帮助,并制作了一个只比较该字典中最后两个字符串的代码,而不是全部:)。 这是代码
def longest_common_sequence(s1, s2):
m = [[0] * (1 + len(s2)) for i in range(1 + len(s1))]
longest, x_longest = 0, 0
for x in range(1, 1 + len(s1)):
for y in range(1, 1 + len(s2)):
if s1[x - 1] == s2[y - 1]:
m[x][y] = m[x - 1][y - 1] + 1
if m[x][y] > longest:
longest = m[x][y]
x_longest = x
else:
m[x][y] = 0
return s1[x_longest - longest: x_longest]
for i in range(40,59):
s1=str(dictionar['sequence_'+str(i)])
s2=str(dictionar['sequence_'+str(i+1)])
longest_common_sequence(s1,s2)
如何修改它以获取字典中所有序列之间的公共子序列?谢谢!
【问题讨论】:
-
首先不要使用
dict作为变量名;它掩盖了dict类型/构造函数,并且很快就会咬你。 -
现在改了 :) 谢谢!
标签: python dictionary sequence