如何比较两个DNA序列并在配对列表中返回相同的核苷酸

时间:2018-11-11 23:45:39

标签: python

我想比较两个DNA序列并返回配对列表中相同的核苷酸(序列1中的位置,序列2中的位置)

输入:

a = [G, T, T, U, I, P]
b = [E, G, T, P]

输出:

[[0,1], [1,2], [2,2], [5,3]]

2 个答案:

答案 0 :(得分:1)

您可以使用for循环:

a_s = ["G", "T", "T", "U", "I", "P"]
b_s = ["E", "G", "T", "P"]

d = []
for i,a in  enumerate(a_s):
    for j,b in enumerate(b_s):
        if a == b:
            d.append([i,j])
print(d) 

退出:

[[0, 1], [1, 2], [2, 2], [5, 3]]

或者您可以在一行中完成该操作:

a_s = ["G", "T", "T", "U", "I", "P"]
b_s = ["E", "G", "T", "P"]    

print([[x, y] for x, av in enumerate(a_s) for y, bv in enumerate(b_s) if av == bv])

具有上述相同的输出。

注意: 在大多数情况下,第一个版本更具可读性,第二个版本更简洁。您始终可以根据代码上下文及其用途来选择两者。

答案 1 :(得分:0)

利用“ itertools”模块中的“ product”的两个示例。

第一个是传统的for循环,用于添加列表。

第二个是等效列表理解的。

from itertools import product

a = list('GTTUIP')
b = list('EGTP')

# Without a comprehension.
results = []
for (x, a_s), (y, b_s) in product(enumerate(a), enumerate(b)):
    if a_s == b_s:
        results.append([x, y])
print(results)

# With a comprehension
results = [[x, y]
          for (x, a_s), (y, b_s) 
          in product(enumerate(a), enumerate(b)) 
          if a_s == b_s]
print(results)

OUT:

  

[[0,1],[1,2],[2,2],[5,3]]

     

[[0,1],[1,2],[2,2],[5,3]]