<p>内部</p>
<pre><code>for line1 in f2:
</code></pre>
<p>listA不会被映射到相关的f2行。你把它们储存在dictA里了。你知道吗</p>
<p>一旦测试了主题是否在dictA中,就需要检索正确的listA</p>
<pre><code>for line1 in f2:
new_list=line1.rstrip('\n').split('\t')
query=new_list[0]
subject=new_list[1]
new_list.append(query)
new_list.append(subject)
if subject in dictA:
listA = dictA[subject]
output.writelines(query+'\t'+subject+'\t'+str(listA[1])+str(listA[2])+'\n')
output.close()
</code></pre>
<p>我不明白你为什么在这里加上<code>new_list</code>:</p>
<pre><code> query=new_list[0]
subject=new_list[1]
new_list.append(query)
new_list.append(subject)
</code></pre>
<p>在处理第一行时,您读入:</p>
<pre><code>contig1 GRMZM5G888627_P01
</code></pre>
<p>变成<code>new_list</code>,给你本质上:</p>
<pre><code>new_list == ['contig1', 'GRMZM5G888627_P01']
</code></pre>
<p>然后将<code>query</code>和<code>subject</code>设置为列表中的两项。然后把它们加回去,给你:</p>
<pre><code>new_list == ['contig1', 'GRMZM5G888627_P01', 'contig1', 'GRMZM5G888627_P01']
</code></pre>
<p>你从来没用过。您应该能够:</p>
<pre><code>for line1 in f2:
new_list=line1.rstrip('\n').split('\t')
subject=new_list[1]
if subject in dictA:
listA = dictA[subject]
output.writelines(new_list[0] + '\t' + subject + '\t' + str(listA[1]) + str(listA[2]) + '\n')
output.close()
</code></pre>
<p>而且你只写了一行,所以<code>output.write</code>就可以了。而字符串加法通常是不好的,所以用格式代替。您的<code>listA</code>存储了字符串,因此我取消了<code>str()</code>调用。你知道吗</p>
<pre><code>for line1 in f2:
new_list=line1.rstrip('\n').split('\t')
subject=new_list[1]
if subject in dictA:
listA = dictA[subject]
output.write("{}\t{}\t{}{}\n".format(new_list[0], subject, listA[1], listA[2])
output.close()
</code></pre>