0

我的目标是迭代地总结从代码生成的输出。

下面的代码可以准确地计算出两个字符串之间的汉明距离,但不能将多个字符串之间的距离相加。请参阅下面的示例字符串:

w=['ground', 'joint']
c=['gnoufd', 'johnt']

def hamming_distance(s1, s2):
    if len(s1)==len(s2):
        return sum(x1 != x2 for x1, x2 in zip(s1, s2))

for x,y in zip(w,c):
    for j in x:
        for k in y:
           l=hamming_distance(x, y)
    print l

上面代码的输出是:1 2 我尝试使用列表推导,希望我能得到一个列表中的输出并将它们相加,但得到了错误的输出。

for x,y in zip(w,c):
    k=[hamming_distance(x,y) for j,k in zip(x,y)]
    print k

期望输出:3---(以上1和2之和)

有什么建议么?谢谢。

4

2 回答 2

3

在这个块中:

for x,y in zip(w,c):
    for j in x:
        for k in y:
           l=hamming_distance(x, y)
    print l

你不使用jor k,所以你可以摆脱那些循环。

for x,y in zip(w,c):
    l=hamming_distance(x, y)
    print l

这更容易转换为生成器表达式。

k = [hamming_distance(x, y) for x, y in zip(w,c)]
print k
print sum(k)

输出:

[2,1]
3
于 2013-08-30T12:40:07.340 回答
1

而不是你的for循环 - 只是map这样使用:

diff = map(hamming_distance, w, c)
# [2, 1]
print sum(diff)
# 3
于 2013-08-30T12:39:22.990 回答