我对python比较陌生,我一直在研究一种涉及遗传代码的算法。我首先把所有的4个遗传基础,A,C,T,G与一个列表联系起来。A为1 00.0。C为0,1,0。T是0,0,1,0,G是0,0,0,1。有两个不同的遗传密码,一个是原始的,另一个是遗传变异的。该算法将根据两种遗传密码的不同,得出所给数据的结论。但首先,我需要对数据进行预处理,然后才能对算法做出结论。
A = [1, 0, 0, 0]
C = [0, 1, 0, 0]
T = [0, 0, 1, 0]
G = [0, 0, 0, 1]
original = [A, T, T, G, C]
copy = [C, T, T, A, T]
final = original[:]
for i, v in enumerate(original):
if v == copy[i]:
print(v)
elif v != copy[i]:
v.insert(0, ("add"))
print(v)这是输出:

我试着制作算法,这样算法就可以逐项比较原始和复制的遗传代码。它检查每个字母是否相等。对于第一个问题,A和C是不相等的。如果不相等,我希望算法输出1,1,0,0。这两个字母基本上是重叠的。如果算法看到代码是相同的,例如,第二个代码,T& T,它应该保持与它所做的相同。
在上面的图像中,它说要添加,这些是算法重叠和应该改变的线条。我的问题是,当算法检测到两个不同的字母时,如何才能将两个单独的列表重叠在一起呢?
发布于 2020-06-19 01:44:49
您应该看看逻辑运算符。你所做的是对你的碱基对进行“或”操作。如果使用numpy,则可以将其向量化,并大大加快处理速度:
original_array = np.array(original)
copy_array = np.array(copy)
oringal_array | copy_array结果:
array([[1, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 1, 0],
[1, 0, 0, 1],
[0, 1, 1, 0]])如果不想使用numpy,仍然可以在列表中使用逻辑或|:
final = []
for o, c in zip(original, copy):
final.append([x | y for x, y in zip(o, c)])或
final = [[x | y for x, y in zip(o, c)] for o, c in zip(original, copy)]发布于 2020-06-19 01:46:28
试试这个:
import numpy as np
A = [1, 0, 0, 0]
C = [0, 1, 0, 0]
T = [0, 0, 1, 0]
G = [0, 0, 0, 1]
original = [A, T, T, G, C]
copy = [C, T, T, A, T]
x = [1 if 1 in j else 0 for i, v in enumerate(original) for j in zip(v, copy[i])]
new = np.array_split(x, len(original))
print(new)https://stackoverflow.com/questions/62461913
复制相似问题