我有大量的DNA序列格式化为文本文件,如下所示:
//
BLOCK_1
AATTCAT
AGTTCAT
AATTCGT
//
BLOCK_2
AGAGGA
AGAGGA
AGAGGA
块中的每一行对应一个样本。真实数据集每个序列行有120个字符,每个< block>块有250个样本/行。和 共有大约10000个这样的街区。
我现在需要删除每个块中所有样本中相同的位置。所需的输出如下所示:
//
BLOCK_1
AA
GA
AG
//
BLOCK_2
通过为每一行创建一个哈希列表并在SO:Python: determine if all items of a list are the same item上执行此操作,可以快速完成所有序列相同的块。但是,我现在正在努力找到一种方法来有效地找到那些至少有一个不同的字符串中的位置。
答案 0 :(得分:1)
这是一种做法。请注意,这只处理单个块,因此您必须将其扩展为使用多个块:
>>> block1 = ['AATTCAT', 'AGTTCAT', 'AATTCGT']
>>> [''.join(b) for b in zip(*(r for r in zip(*block1) if len(set(r)) > 1))]
['AA', 'GA', 'AG']
这基本上转换了2d数组,这样当同一行(之前在同一列中)的所有字母相同时,您可以删除列表。然后你重新转置结果。