将列表的所有元素相互比较

时间:2017-11-07 19:58:10

标签: python python-3.x list

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

读取看起来像这样,带有标题,序列,+和另一个序列:

@ ST-K00127:119:HF2FVBBXX:8:1101:31253:1595 1:N:0:TCTTCACA TTTTTCATTGATCTGTCGCAAGGCTTCCTCCGCTGTACCGTTTAACTTGAATTCCATTACGTAAATAAATCTGTCTGTC + AAAFFJJFJJJJJFJJJ

字典元素可能如下所示: 关键:TCTTCACA值:[[0,350],[351,500]]

现在我正在尝试运行一个测量两个条形码之间编辑距离的函数,我想对每个条形码对照字典中的所有其他条形码执行此操作。我正在创建一个存储所有编辑距离的上三角矩阵,然后我找到编辑距离等于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

0 个答案:

没有答案