我是python的新手。我希望所有的python大师都能提出一些方法来使下面的代码更加pythonic,从而提高效率。 它是一个简单的代码,用于查找两个单词之间的编辑距离。
P.S。我想改进代码,而不是逻辑或算法优化。
class test:
def __init__(self,a,b,I=1,D=1,R=1):
self.a = a
self.b = b
self.mem = dict()
self.la = len(a)
self.lb = len(b)
self.I = I
self.D = D
self.R = R
def diff(self,i=0,j=0):
T = self.diff
memo = self.mem
if j == self.lb: return self.D * i
if i == self.la: return self.D * j
if (i,j) in memo:
return memo[(i,j)]
if self.a[i] == self.b[j]:
memo[(i,j)] = T( i+1,j+1 )
return memo[ (i,j) ]
memo[(i,j)] = min(self.R + T(i+1,j+1) , self.D + T(i+1,j) , self.I + T(i,j+1) ,
self.D + T(i,j+1) , self.I + T(i+1,j) )
return memo[(i,j)]
变量说明:
a,b是要找到edit distance的两个字符串。 I,D,R插入删除和替换单个字母的成本。 mem是用于记忆递归调用的字典。 i和j分别是字符串a和b的指针
答案 0 :(得分:3)
Pythonic将是:
T(i+1, j+1)
而不是T( i+1,j+1 )
memo[i,j]
而非memo[(i,j)]
self.diff(i+1, j+1)
而非T(i+1,j+1)
答案 1 :(得分:1)
我认为代码非常pythonic,但正如评论中所述,选择通用单字母变量字是一个非常糟糕的主意,并且使代码很难理解,而且这不是pythonic。
这适用于每种编程语言,但在某些情况下,在python和其他dynamically typed languages中更是如此。
尝试用变量名称真正慷慨和描述。
请参阅此网站创建者博客中的example(在“编码恐怖”的含义下?“)。
答案 2 :(得分:1)
您可能需要考虑将{00}}的行中的memoization图层分解出来。