我的目标是迭代地对代码生成的输出求和。
下面的代码可以准确地计算两个字符串之间的hamming距离,但不能将多个字符串间的距离相加。请参阅下面的示例字符串:
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---(以上一个和两个的总和)
有什么建议吗?谢谢
在此块中:
for x,y in zip(w,c):
for j in x:
for k in y:
l=hamming_distance(x, y)
print l
您不使用j
或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
不要使用for
循环,只需使用map
即可:
diff = map(hamming_distance, w, c)
# [2, 1]
print sum(diff)
# 3