首页 > 解决方案 > 使列表中两个字符串之间的汉明距离最多为 3

问题描述

我有一个随机生成的附加到列表 (z) 的值列表,所以我所做的是将彼此相邻的两个索引转换为单独的字符串以相互比较。我需要使列表中所有字符串之间的汉明距离最多为 3。我也不能为此使用任何模块。任何帮助,将不胜感激。

 z = ["AAATCG", "GAGCGT"]
 i = 0
 s1 = ""
 s2 = "" 
 while i < len(z) -1:
   s1 = z[i] 
   i = i+1
   s2 = z[i] 

在那之后我迷路了

标签: pythonpython-3.xstringlist

解决方案


你最好使用for循环。在下面的代码中z[0] = "AAATCG"z[1] = "GAGCGT". 该if语句检查字符串中的字母是否不同,如果它们不同,则ham_dist增加1.

# For the Hamming distance
ham_dist = 0
z        = ["AAATCG", "GAGCGT"]

for idx in range(len(z[0])):
    if z[0][idx] != z[1][idx]:
        ham_dist += 1
        
print(ham_dist)

如果要编辑字符串以将汉明距离减小为零,则以下代码将编辑第一个字符串以复制第二个字符串。如果你想反过来,只需反转索引即可。

z             = ["AAATCG", "GAGCGT"]
z_0_list      = list(z[0])
z_1_list      = list(z[1])
orig_ham_dist = 0
new_ham_dist  = 0
z_ouput       = []

# Calculate original Hamming distance & edit strings
for idx in range(len(z[0])):
    if z_0_list[idx] != z_1_list[idx]:
        z_0_list[idx] = z_1_list[idx]
        orig_ham_dist += 1
 
z_ouput.append("".join(z_0_list))
z_ouput.append("".join(z_1_list)) 
 
# Calculate new Hamming distance     
for idx in range(len(z_ouput[0])):
    if z_ouput[0][idx] != z_ouput[1][idx]:
        new_ham_dist += 1
        
print(orig_ham_dist)
print(z)
print('-------------------------')
print(new_ham_dist)
print(z_ouput)

推荐阅读