Python 列表未按正确顺序追加

Python 列表未按正确顺序追加,python,list,for-loop,if-statement,append,Python,List,For Loop,If Statement,Append,在这段代码中,我试图用前50个R值附加基因ID的基因描述。我得到了两张top50和geneanno的名单 前50名的列表看起来像[0.521895111466706,'AHY40589'] geneanno的列表看起来像['AHY39293','二硫键形成蛋白DsbB\n'] 下面的代码显示了我是如何添加列表的,但我似乎无法添加与基因id对应的正确基因描述 r_sorted = sorted(r_value) unsorted = [] for s in r_sorted: if s

在这段代码中,我试图用前50个R值附加基因ID的基因描述。我得到了两张top50和geneanno的名单

前50名的列表看起来像
[0.521895111466706,'AHY40589']
geneanno的列表看起来像
['AHY39293','二硫键形成蛋白DsbB\n']

下面的代码显示了我是如何添加列表的,但我似乎无法添加与基因id对应的正确基因描述

    r_sorted = sorted(r_value)
unsorted = []
for s in r_sorted:
  if s not in unsorted:
    unsorted.append(s)
top50 = unsorted[::-1][:50]                           #top 50 with highest correlation
print(top50)

annotation = []
path = '/content/drive/abc_gene_anno.txt'
with open(path,'r') as f:
  geneanno = [l.split('\t') for l in f] #obtain gene ids
  for d in geneanno:
    for c in top50:
      if c[1] in d[0]:
        annotation.append(d[1][:-1])
print(d)
print(c)
print(annotation)
输出为

[[0.9999999999999999, 'AHY39286'], [0.939173984187146, 'AHY39284']]
['AHY39293', 'Disulfide bond formation protein DsbB\n']
[0.5218951111466706, 'AHY40589']
['Cysteine-rich domain', 'Cysteine-rich domain', 'FdhD/NarQ family', 'Protein of unknown function (DUF979)']
例如,使用具有最高r值的基因ID(AHY39286),


但是,我的代码会打印此内容,而不是尝试更改循环的顺序

对于top50中的c:
对于geneanno中的d:

目前,与文件中出现键相关的
注释的顺序

如果我正确理解了您所需的输出,并且您希望注释是
geneanno
中的文本,按
top50
中相应的输入位置排序,那么您可以使用
插入
-

for d in geneanno:
    for i, c in enumerate(top50):
        if d[0] in c:
            annotations.insert(i, d[1][:-1])


所需输出是什么?@BenWo注释的所需输出<代码>[“吡啶核苷酸二硫化物氧化还原酶”,“二氢普胺脱氢酶结构域II,4Fe-4S簇](基因描述),对应于geneanno<代码>[“AHY39286”,“吡啶核苷酸二硫化物氧化还原酶”],['AHY39286','二氢普胺脱氢酶结构域II,4Fe-4S簇']
以r值最高的基因id为例,你能不能通过使用
集合来更简单地实现代码的第一部分,或者通过使用来更有效地实现代码的第一部分?谢谢!它起作用了!你介意解释它背后的原因吗?我不明白改变顺序是如何影响代码的output@SeahJiaHui您有未排序的列表
geneanno
(例如,它的第一行包含
d[0]='AHY40589'
,然后您将步行投掷
top50
,如果d[0]中的c[1]:
(注意:d[0]对于迭代将是相同的)并输入值d[1][:-1].所以它只尊重列表从第一个开始的顺序loop@SeahJiaHui尝试运行此代码以了解geneanno中的d:对于top50中的c:打印(“c[1]”,c[1],“d[0]”,d[0]),然后更改循环顺序并再次运行代码