【问题标题】:Making the hamming distance between two strings in a list at most 3使列表中两个字符串之间的汉明距离最多为 3
【发布时间】:2020-10-23 16:26:28
【问题描述】:

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

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

之后我就迷路了

【问题讨论】:

  • 能否包含您正在使用的代码?
  • 编辑你的问题并把它放在那里而不是在 cmets
  • @DrBwts 抱歉刚刚做了

标签: python python-3.x string list


【解决方案1】:

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

【讨论】:

  • 这不是只打印汉明距离而不是编辑字符串吗?
  • 我已经编辑了我的回复。上面的代码会将2字符串之间的汉明距离减少到0
猜你喜欢
  • 2019-06-07
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
  • 2014-01-28
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
  • 2013-04-22
相关资源
最近更新 更多