在 dna 列表中找到导致最小汉明距离的 k-mer
Finding the k-mer that results in minimum hamming distance in a list of dna
我正在编写一个程序,给定输入 k=一些数字和 DNA=dna 片段列表,输出应该给出大小为 k 的 k-mer,它在字符串数组中具有最小汉明距离.我有三个函数,1. 一个计算片段 dna 的 k-mer 和不同 windows 之间的汉明距离和 returns 得分最低的 window 的汉明距离, 2. 一个生成所有可能的大小为 k 的 k-mers,和 3. 一个遍历大小为 k 的所有 windows 和每个可能的 k-mer。不幸的是,我的程序给出了不正确的输出 AAA。我知道我的逻辑错误不是在 combination(k) 中,也不是在 hammingDistance 中,因为我之前使用过它们来获得正确的结果。
import itertools
def combination(k):
bases=['A','T','G','C']
combo=[''.join(p) for p in itertools.product(bases, repeat=k)]
return combo
def hammingDistance(pattern, seq):
if pattern == seq:
return 0
else:
dist=0
for i in range(len(seq)):
if pattern[i] != seq[i]:
dist += 1
return dist
def median_string(k, DNA):
k_mers = combination(k)
distance = 0
temp = 1000000000000000000
for string in DNA:
hamming = 1000000000000000000
c = 0
for k_mer in k_mers:
for subset in string[c: len(string) - k]:
if hamming > hammingDistance(k_mer, string[c : c+k]):
hamming = hammingDistance(k_mer, string[c : c+k])
c += 1
distance += hamming
if distance < temp:
temp = distance
best_pattern = k_mer
distance = 0
return best_pattern
原来只是最后一个条件语句的缩进错误。
def median_string(k, DNA):
k_mers = combination(k)
distance = 0
temp = 1000000000000000000
for k_mer in k_mers:
for string in DNA:
hamming = 1000000000000000000
c = 0
for subset in string[c: len(string) - k]:
if hamming > hammingDistance(k_mer, string[c : c+k]):
hamming = hammingDistance(k_mer, string[c : c+k])
c += 1
distance += hamming
if distance < temp:
temp = distance
best_pattern=k_mer
distance=0
return best_pattern
我正在编写一个程序,给定输入 k=一些数字和 DNA=dna 片段列表,输出应该给出大小为 k 的 k-mer,它在字符串数组中具有最小汉明距离.我有三个函数,1. 一个计算片段 dna 的 k-mer 和不同 windows 之间的汉明距离和 returns 得分最低的 window 的汉明距离, 2. 一个生成所有可能的大小为 k 的 k-mers,和 3. 一个遍历大小为 k 的所有 windows 和每个可能的 k-mer。不幸的是,我的程序给出了不正确的输出 AAA。我知道我的逻辑错误不是在 combination(k) 中,也不是在 hammingDistance 中,因为我之前使用过它们来获得正确的结果。
import itertools
def combination(k):
bases=['A','T','G','C']
combo=[''.join(p) for p in itertools.product(bases, repeat=k)]
return combo
def hammingDistance(pattern, seq):
if pattern == seq:
return 0
else:
dist=0
for i in range(len(seq)):
if pattern[i] != seq[i]:
dist += 1
return dist
def median_string(k, DNA):
k_mers = combination(k)
distance = 0
temp = 1000000000000000000
for string in DNA:
hamming = 1000000000000000000
c = 0
for k_mer in k_mers:
for subset in string[c: len(string) - k]:
if hamming > hammingDistance(k_mer, string[c : c+k]):
hamming = hammingDistance(k_mer, string[c : c+k])
c += 1
distance += hamming
if distance < temp:
temp = distance
best_pattern = k_mer
distance = 0
return best_pattern
原来只是最后一个条件语句的缩进错误。
def median_string(k, DNA):
k_mers = combination(k)
distance = 0
temp = 1000000000000000000
for k_mer in k_mers:
for string in DNA:
hamming = 1000000000000000000
c = 0
for subset in string[c: len(string) - k]:
if hamming > hammingDistance(k_mer, string[c : c+k]):
hamming = hammingDistance(k_mer, string[c : c+k])
c += 1
distance += hamming
if distance < temp:
temp = distance
best_pattern=k_mer
distance=0
return best_pattern