Python 在列表中编辑列表的特定部分

Python 在列表中编辑列表的特定部分,python,python-3.x,Python,Python 3.x,我对python比较陌生,我一直在研究一种涉及遗传代码的算法。我首先把所有4个基因基,A,C,T,G和一个列表联系起来。A是1,0,0,0。C是0,1,0,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]

我对python比较陌生,我一直在研究一种涉及遗传代码的算法。我首先把所有4个基因基,A,C,T,G和一个列表联系起来。A是1,0,0,0。C是0,1,0,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,它应该保持不变


在上面的图像中,它说要添加,这些是算法重叠的行,应该更改。我的问题是如何使算法检测到两个不同的字母时,它基本上重叠两个单独的列表以合并在一起?

您应该看看逻辑运算符。您正在对碱基对执行or操作。如果使用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)])


您应该看看逻辑运算符。您正在对碱基对执行or操作。如果使用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)])

试试这个:

将numpy作为np导入 A=[1,0,0,0] C=[0,1,0,0] T=[0,0,1,0] G=[0,0,0,1] 原始=[A,T,T,G,C] 拷贝=[C,T,T,A,T] x=[1如果j中有1,则i为0,zipv中的j为v,则复制[i]] new=np.array\u splitx,lenoriginal printnew 试试这个:

将numpy作为np导入 A=[1,0,0,0] C=[0,1,0,0] T=[0,0,1,0] G=[0,0,0,1] 原始=[A,T,T,G,C] 拷贝=[C,T,T,A,T] x=[1如果j中有1,则i为0,zipv中的j为v,则复制[i]] new=np.array\u splitx,lenoriginal printnew
很好的回答@busybear很好的回答@busybear