python - 使列表中两个字符串之间的汉明距离最多为 3
问题描述
我有一个随机生成的附加到列表 (z) 的值列表,所以我所做的是将彼此相邻的两个索引转换为单独的字符串以相互比较。我需要使列表中所有字符串之间的汉明距离最多为 3。我也不能为此使用任何模块。任何帮助,将不胜感激。
z = ["AAATCG", "GAGCGT"]
i = 0
s1 = ""
s2 = ""
while i < len(z) -1:
s1 = z[i]
i = i+1
s2 = z[i]
在那之后我迷路了
解决方案
你最好使用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)
推荐阅读
- php - Process 类依赖于 proc_open Laravel 8
- active-directory - Windows 域帐户被锁定
- c++ - 设置给予额外元素
- reactjs - 错误数组正在返回所有映射的错误
- python - 保存和加载权重和优化器状态以进行再训练
- r - 在 rstudio 中创建一个分支以与现有存储库同步
- javascript - 重用包含上下文的组件
- javascript - 如果对象数组不包含具有此 ID 的对象,如何返回 true?
- optaplanner - Optaplanner 在安排设备时可以考虑某些优先级吗?
- scala - Spark 与 AWS Elastic Search 集成 - 获取 - 没有正确设置的云实例 'es.nodes.wan.only' 错误