【发布时间】:2017-04-04 03:26:57
【问题描述】:
def edDistRecursive(a,b):
#print(a, 'a')
#print(b,'b')
if len(a) == 0:
return len(b)
if len(b)==0:
return len(a)
delta = 1 if a[-1] != b[-1] else 0
return min(edDistRecursive(a[:-1], b[:-1]) + delta, edDistRecursive(a[:-1], b)+1, edDistRecursive(a, b[:-1]) +1)
edDistRecursive('actor','racto')
2
但是,如果我在没有min 的情况下运行它,
TypeError: can only concatenate tuple (not "int") to tuple
这是一种用于遗传学(近似匹配)的算法,用于确定需要多少次编辑才能匹配a 和b。我想如果我在没有 min 的情况下运行它,我将能够看到每个函数产生了多少编辑。
编辑:我想我理解输出是一个元组,但我也有点困惑。
如果我删除其他两个函数,则像这样简化函数
def edDistRecursive(a,b):
#print(a, 'a')
#print(b,'b')
if len(a) == 0:
return len(b)
if len(b)==0:
return len(a)
delta = 1 if a[-1] != b[-1] else 0
return edDistRecursive(a[:-1], b[:-1]) + delta
edDistRecursive('actor','racto') returns a value of 5.
为什么这里可以毫无问题地添加delta?
下面是另一个例子
def sum(x,y):
x =3
y =2
return x+y, y
(sum(2,3))
即使是这样的输出是一个元组的东西,对其元素之一的加法运算也没有问题。
在我上面的函数中,值 delta 或 +1 被添加到元组中,这就是引发错误的原因,但似乎 int 值没有被添加到整个元组中。事实上,元组由 (function + int) 组成。所以当元组本身的一个元素是(函数+ int)时,我看不到我是如何添加到元组中的。
x,y,z = edDistRecursive('actor','racto') 似乎也导致了同样的错误。
我以为通过给每个函数((edDistRecursive(a[:-1], b[:-1]) + delta), (edDistRecursive(a[:-1], b)+1), (edDistRecursive(a, b[:-1]) +1))加括号,
Python 可以将元组的每个元素视为function + int,但我遇到了同样的错误。
有没有办法获取每个函数的值,这是我最初的目标?
【问题讨论】:
-
min是一个函数,括号中的逗号分隔列表是该函数的参数。它将返回其中一个整数。如果没有min,括号中的逗号分隔列表是一个元组,你不能在一个元组中添加一个to。