【发布时间】:2017-03-04 19:10:47
【问题描述】:
我几天前开始学习 Python 3,所以如果我的代码很糟糕,我很抱歉。
我编写了一个脚本来查找列表中字符串的最小Hamming distance。现在我将使用的字符串是相同长度的二进制字,所以我的第一个问题是在 Python 中有一个按位的解决方案吗?
其次,我的代码是否正确,如果正确,提高效率的最佳方法是什么?我的搜索没有返回 Python 3 的答案,这就是我在这里问的原因。
def min_ham_dist(a):
min_dist = len(a[0]) # Defaults minimum distance to maximum length of string.
for i in range(len(a)):
for j in range(i+1, len(a)): # Compares all words after ith word.
dist = 0
for k in range(len(a[i])):
if a[i][k] != a[j][k]:
dist += 1
if dist < min_dist:
min_dist = dist
return min_dist
非常感谢
【问题讨论】:
-
整数可以有任意长度吗?或者它们有最大长度吗?
-
在这种情况下,它们是固定的。我写这篇文章是为了解决一个包含 16 个长度为 12 的二进制字的列表的相当简单的问题。它应该通过视觉解决,但我觉得最好使用脚本来减少人为错误。不过,很高兴看到适用于任意长度的脚本。
-
该维基百科页面上有一个简洁明了的 Python 3 示例;) 它基本上显示了完成这项工作所需的条件:如果两个输入字符串的长度相同,请使用
zip()压缩它们,然后比较 zip 中的每一对,计算有多少不相等。 -
就在我的鼻子前面!我只是链接了维基百科页面以供参考,并没有考虑自己阅读。谢谢你,达特茅斯。
标签: performance python-3.x hamming-distance