如何比较不相同的列表并从 Python 中的字典中导出值?
How to compare non-identical lists and derive values from a dictionary in Python?
这是一个字典键,用于存储每个密码子(三联碱基,如 ATG、GCT 等)的氨基酸值(单个字母)。
aminoacid = {'TTT' : 'F','TTC' : 'F','TTA' : 'L','TTG' : 'L','CTT' : 'L','CTC' : 'L','CTA' : 'L','CTG' : 'L','ATT' : 'I','ATC' : 'I','ATA' : 'I','ATG' : 'M','GTT' : 'V','GTC' : 'V','GTA' : 'V','GTG' : 'V','TCT' : 'S','TCC' : 'S','TCA' : 'S','TCG' : 'S','CCT' : 'P','CCC' : 'P','CCA' : 'P','CCG' : 'P','ACT' : 'T','ACC' : 'T','ACA' : 'T','ACG' : 'T','GCT' : 'A','GCG' : 'A','GCA' : 'A','GCG' : 'A','TAT' : 'Y','TAC' : 'Y','TAA' : 'STOP','TAG' : 'STOP','CAT' : 'H','CAC' : 'H','CAA' : 'Q','CAG' : 'Q','AAT' : 'N','AAC' : 'N','AAA' : 'K','AAG' : 'K','GAT' : 'D','GAC' : 'D','GAA' : 'E','GAG' : 'E','TGT' : 'C','TGC' : 'C','TGA' : 'STOP','TGG' : 'W','CGT' : 'R','CGC' : 'R','CGA' : 'R','CGG' : 'R','AGT' : 'S','AGC' : 'S','AGA' : 'R','AGC' : 'R','CGT' : 'G','GGC' : 'G','GGA' : 'G','GGG' : 'G',}
如您所见,多个密码子可以编码相同的氨基酸(例如 GGT、GGC、GGA、GGG 等,所有密码子都编码甘氨酸 (G))。这些是同义的 (DSyn),如果密码子编码不同的氨基酸,它们是非同义的 (DNonsyn)
这是 的扩展,如果有人感兴趣的话。
我有以下序列:
list1 = ['ACT','ACT','nonsyn','G','L']
list2 = ['ACT','ACC','GGT','ATT']
在这里,
- list1 源自先前的计算,因此它是碱基、氨基酸(单字母条目)和 nonsyn(空)的组合。
- list2 是包含三联体密码子的列表。
在这段代码中,我需要比较 list1 和 list2。 list1 中的每个元素必须只与相应的元素 list2 进行比较以执行以下操作:
如果两个列表中都存在密码子碱基,则比较碱基:
一个。如果碱基相同 (eg. ACT, ACT)
则什么也不做。
b.如果碱基不相同 (eg. ACT, ACC)
则在字典中查找氨基酸。如果氨基酸相同则将 countDsyn
增加 1,如果它们不相同则将 countDnonsyn
增加 1
如果 list1 中的 'nonsyn' 与 list2 进行比较,则什么也不做。
如果将list1中的氨基酸与list2进行比较:从氨基酸字典中查找list2对应的氨基酸。
一个。如果氨基酸相同则 countDsyn
增加 1
b.如果氨基酸相同则将 countDnonsyn
增加 1
给定案例的最终输出:
Dsyn = 2
Dnonsyn = 1
需要帮助检查我在比较 if 循环时从字典中调用值的方式是否正确
代码尝试:
countDsyn = 0
countDnonsyn = 0
for pos1,value1 in enumerate(list1):
for pos2,value2 in enumerate(list2):
if value1 in list1 = combination(ATGC,3): #eg. ACT,AGT,TTT etc. There are can be 64 such combinations
if value1 in list1 == value2 in list2: #eg. ACT, ACT
#Do nothing
if value1 in list1 != value1 in list2: #eg. ACT,ACC
if value1[aminoacid] == value2[aminoacid]:
countDsyn =+1
else:
countDnonsyn =+1
if value1 in list1 = "nonsyn":
#Do nothing
if value1 in list1 = (A-Z): #eg. 'G''L' etc.
if value1 == value2[aminoacid] #eg. comparing 'G' and the aminoacid value of GTT from the dictionary
countDsyn =+ 1
if value1 != value2[aminoacid]:
countDnonsyn =+1
尝试这样的事情:
cleared_list1 = [x for x in list1 if x != "nonsyn"]
cleared_list2 = [x for x in list2 if x != "nonsyn"]
cur_position = 0
for element1, element2 in zip(cleared_list1, cleared_list2):
# Compare elements and update counters here.
cur_position += 1
使用zip
将顺序迭代两个列表的元素。
你需要这样的东西:
for value1, value2 in zip(list1, list2):
# Condition 2 in your question
if value1 == 'nonsyn':
continue
# Condition 1 in your question
if value1 in aminoacid.keys():
if value1 == value2:
continue
elif aminoacid[value1] == aminoacid[value2]:
countDsyn += 1
else:
countDnonsyn += 1
# Condition 3 in your question
else:
if aminoacid[value2] == value1:
countDsyn += 1
else:
countDnonsyn += 1
@Ben 的回答很不错。还有两件事。您的 aminoacid
字典有误。其中一个甘氨酸密码子是CGT,应该是GGT。也代替条件
if len(value1) == 3:
您可能想使用
if value1 in aminoacid.keys():
它直接测试您的三联体是否在允许的密码子集中。如果你有 '7&D' 作为三连音,上面的变体也是正确的。
这是一个字典键,用于存储每个密码子(三联碱基,如 ATG、GCT 等)的氨基酸值(单个字母)。
aminoacid = {'TTT' : 'F','TTC' : 'F','TTA' : 'L','TTG' : 'L','CTT' : 'L','CTC' : 'L','CTA' : 'L','CTG' : 'L','ATT' : 'I','ATC' : 'I','ATA' : 'I','ATG' : 'M','GTT' : 'V','GTC' : 'V','GTA' : 'V','GTG' : 'V','TCT' : 'S','TCC' : 'S','TCA' : 'S','TCG' : 'S','CCT' : 'P','CCC' : 'P','CCA' : 'P','CCG' : 'P','ACT' : 'T','ACC' : 'T','ACA' : 'T','ACG' : 'T','GCT' : 'A','GCG' : 'A','GCA' : 'A','GCG' : 'A','TAT' : 'Y','TAC' : 'Y','TAA' : 'STOP','TAG' : 'STOP','CAT' : 'H','CAC' : 'H','CAA' : 'Q','CAG' : 'Q','AAT' : 'N','AAC' : 'N','AAA' : 'K','AAG' : 'K','GAT' : 'D','GAC' : 'D','GAA' : 'E','GAG' : 'E','TGT' : 'C','TGC' : 'C','TGA' : 'STOP','TGG' : 'W','CGT' : 'R','CGC' : 'R','CGA' : 'R','CGG' : 'R','AGT' : 'S','AGC' : 'S','AGA' : 'R','AGC' : 'R','CGT' : 'G','GGC' : 'G','GGA' : 'G','GGG' : 'G',}
如您所见,多个密码子可以编码相同的氨基酸(例如 GGT、GGC、GGA、GGG 等,所有密码子都编码甘氨酸 (G))。这些是同义的 (DSyn),如果密码子编码不同的氨基酸,它们是非同义的 (DNonsyn)
这是
我有以下序列:
list1 = ['ACT','ACT','nonsyn','G','L']
list2 = ['ACT','ACC','GGT','ATT']
在这里, - list1 源自先前的计算,因此它是碱基、氨基酸(单字母条目)和 nonsyn(空)的组合。 - list2 是包含三联体密码子的列表。
在这段代码中,我需要比较 list1 和 list2。 list1 中的每个元素必须只与相应的元素 list2 进行比较以执行以下操作:
如果两个列表中都存在密码子碱基,则比较碱基: 一个。如果碱基相同
(eg. ACT, ACT)
则什么也不做。 b.如果碱基不相同(eg. ACT, ACC)
则在字典中查找氨基酸。如果氨基酸相同则将countDsyn
增加 1,如果它们不相同则将countDnonsyn
增加 1如果 list1 中的 'nonsyn' 与 list2 进行比较,则什么也不做。
如果将list1中的氨基酸与list2进行比较:从氨基酸字典中查找list2对应的氨基酸。 一个。如果氨基酸相同则
countDsyn
增加 1 b.如果氨基酸相同则将countDnonsyn
增加 1
给定案例的最终输出:
Dsyn = 2
Dnonsyn = 1
需要帮助检查我在比较 if 循环时从字典中调用值的方式是否正确
代码尝试:
countDsyn = 0
countDnonsyn = 0
for pos1,value1 in enumerate(list1):
for pos2,value2 in enumerate(list2):
if value1 in list1 = combination(ATGC,3): #eg. ACT,AGT,TTT etc. There are can be 64 such combinations
if value1 in list1 == value2 in list2: #eg. ACT, ACT
#Do nothing
if value1 in list1 != value1 in list2: #eg. ACT,ACC
if value1[aminoacid] == value2[aminoacid]:
countDsyn =+1
else:
countDnonsyn =+1
if value1 in list1 = "nonsyn":
#Do nothing
if value1 in list1 = (A-Z): #eg. 'G''L' etc.
if value1 == value2[aminoacid] #eg. comparing 'G' and the aminoacid value of GTT from the dictionary
countDsyn =+ 1
if value1 != value2[aminoacid]:
countDnonsyn =+1
尝试这样的事情:
cleared_list1 = [x for x in list1 if x != "nonsyn"]
cleared_list2 = [x for x in list2 if x != "nonsyn"]
cur_position = 0
for element1, element2 in zip(cleared_list1, cleared_list2):
# Compare elements and update counters here.
cur_position += 1
使用zip
将顺序迭代两个列表的元素。
你需要这样的东西:
for value1, value2 in zip(list1, list2):
# Condition 2 in your question
if value1 == 'nonsyn':
continue
# Condition 1 in your question
if value1 in aminoacid.keys():
if value1 == value2:
continue
elif aminoacid[value1] == aminoacid[value2]:
countDsyn += 1
else:
countDnonsyn += 1
# Condition 3 in your question
else:
if aminoacid[value2] == value1:
countDsyn += 1
else:
countDnonsyn += 1
@Ben 的回答很不错。还有两件事。您的 aminoacid
字典有误。其中一个甘氨酸密码子是CGT,应该是GGT。也代替条件
if len(value1) == 3:
您可能想使用
if value1 in aminoacid.keys():
它直接测试您的三联体是否在允许的密码子集中。如果你有 '7&D' 作为三连音,上面的变体也是正确的。