我想比较两个DNA序列并返回配对列表中相同的核苷酸(序列1中的位置,序列2中的位置)
输入:
a = [G, T, T, U, I, P]
b = [E, G, T, P]
输出:
[[0,1], [1,2], [2,2], [5,3]]
答案 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]]