作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图在一个字符串上找到最频繁的子串(一定长度 L),但允许一定的阈值或错误 T(在子串的 amy 位置),显然不长于 L 本身。但是,到目前为止我还没有取得任何成功。我怎样才能完成代码?
stn='KLHLHLHKPLHLHLPHHKLH'
L = 4 #(lenght of the pattern)
T = 1 #(maximum tolerance or permitted error in any position of the query pattern)
pattcount = {}
for n in range(len(stn)- L+1):
patt = stn[n:n+L]
s_ = stn[i:i+len(patt)]
if LevenshteinDistance(s_, patt) == T:
pattcount[patt] = pattcount[patt] + 1 if pattcount.has_key(patt) else 1
max = 0
max_patt = []
for p,v in pattcount.iteritems():
if v > max:
max_patt = [p]
max = v
elif v == max:
max_patt += [p]
print (" ".join(max_patt))
因此,例如,如果最频繁的是 KLH,那么 HLH、PLH、KLP、KPH 的频率如何夸大 KLH 的频率(以便报告)?
最佳答案
>>> from Levenshtein import distance
>>> from collections import defaultdict
>>> tups = [stn[i:i+L] for i in range(0, len(stn) - (L - 1))]
>>> print tups
['KLHL', 'LHLH', 'HLHL', 'LHLH', 'HLHK', 'LHKP', 'HKPL', 'KPLH', 'PLHL', 'LHLH',
'HLHL', 'LHLP', 'HLPH', 'LPHH', 'PHHK', 'HHKL', 'HKLH']
>>> d = defaultdict(list)
>>> [d[x].append(y) for x in tups for y in tups
if x is not y and distance(x, y) <= T]
>>> print d
defaultdict(<type 'list'>, {
'KLHL': ['HLHL', 'PLHL', 'HLHL'],
'LHLP': ['LHLH', 'LHLH', 'LHKP', 'LHLH'],
'HLHK': ['HLHL', 'HLHL'],
'HLHL': ['KLHL', 'HLHK', 'PLHL', 'KLHL', 'HLHK', 'PLHL'],
'LHKP': ['LHLP'],
'LHLH': ['LHLP', 'LHLP', 'LHLP'],
'PLHL': ['KLHL', 'HLHL', 'HLHL']})
>>> s = sorted(d.iterkeys(), key=lambda k: len(d[k]), reverse=True)
>>> print s
['HLHL', 'LHLP', 'KLHL', 'LHLH', 'PLHL', 'HLHK', 'LHKP']
关于python - 具有公差的最频繁子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19992175/
我正在尝试使用 Eigen 的 JacobiSVD 进行实验。特别是我试图从奇异值分解中重建输入矩阵。 http://eigen.tuxfamily.org/dox/classEigen_1_1Jac
我想知道 JodaTime 中是否有任何标准 API 来比较具有指定容差的 2 个 DateTime 对象?我正在寻找最好使用 Joda 标准 API 的单行代码。不适用于像 this post 中那
我是一名优秀的程序员,十分优秀!