使列表中两个字符串之间的汉明距离最多为3

2024-10-01 11:32:48 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

之后我就迷路了


Tags: 模块字符串距离列表lens2whiles1
1条回答
网友
1楼 · 发布于 2024-10-01 11:32:48

最好使用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)

相关问题 更多 >