将列表中的所有元素与其他元素进行比较

2024-05-15 15:21:17 发布

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

我正在尝试写一个程序,可以索引的读取快速q文件和运行QC的条形码附加到每个读取。我正在使用一个字典来存储索引,使用条形码作为键-对应的值是保存索引的列表列表。条形码是一个包含字母A、T、G和C的8个字符的字符串

一个read看起来像这样,有一个header、sequence、+和另一个sequence:

@ST-K00127:119:HF2FVBBXX:8个:1101:31253:1595 1:N:0:TCTTCACA ttttt cattgtgtgcaagcttctcgcgctgtacgtataacttgattccattacgtaataaatctgtctgtctc + AAAFFJJFJJJJJFJJ

和dictionary元素可以如下所示: 键:TCTTCACA值:[[0350],[351500]]

现在我试着运行一个函数来测量两个条形码之间的编辑距离,我想对字典中的所有其他条形码对每个条形码执行此操作。我创建了一个存储所有编辑距离的上三角矩阵,然后找到编辑距离等于1或2的位置数。问题是,除非我事先对键列表进行排序,否则我会一直得到不同数量的位置。在我看来,这不会有什么不同,因为所有元素仍然在相互比较,而不管列表的顺序如何。有人能帮我吗?我想知道这是我的代码还是幕后有什么我不知道的。在

代码示例:

key_list = list(barcode_index.keys())
N = len(key_list)
barcode_matrix = np.zeros((N, N)) 
for i in range(N)):
    for j in range(i+1,N):
        barcode_matrix[i,j] = calculate_distance(key_list[i], key_list[j])
error_barcodes1 = np.where(barcode_matrix==1)
error_barcodes2 = np.where(barcode_matrix==2)

def calculate_distance(barcode1, barcode2):
    distance = 0
    for i in range(0,8):
        if barcode1[i] != barcode2[i]:
            distance += 1
    return distance

Tags: keyin编辑距离列表for字典np