<p>我不认为你真的想要一个for循环。。。在</p>
<pre><code>inp = filename.read().strip().split('\n')
inp = [line.split() for line in inp]
# sorts the input lines by the second column, so that groups appear together in order
inp = sorted(inp, key=itemgetter(1))
</code></pre>
<p>现在您有了一个行的列表,这些行被拆分成列</p>
<p>下一步,你想把它们分成第二列相同的行,对吗?在</p>
^{pr2}$
<p>现在,您有一个组的列表,每个组都是一个行的列表;您的数据如下所示:</p>
<pre><code>groups_list = [[['EF1', '1', 'F', 'Flu', '5.7', '3.221', '9.332'],
...],
[['A2', '2', ... ],
...],
...
]
</code></pre>
<p>现在你可以检查一下你真正想知道的是,对于每组中的每个EF,是否有一个匹配的EH。我将为此创建一个助手函数:</p>
<pre><code>def find_match(line, group, EH_list, EF_list):
"""
returns false if no match found, returns true and appends line and match to appropriate lists otherwise
"""
for pmatch in group:
if line[0].startswith('EH') and pmatch[0].startswith('EF') and pmatch[0][2]==line[0][2]: # Match case 1
EH_list.append(line)
EF_list.append(pmatch)
return True
elif line[0].startswith('EF') and pmatch[0].startswith('EH') and pmatch[0][2]==line[0][2]: # Match case 2
EF_list.append(line)
EH_list.append(pmatch)
return True
else:
return False
</code></pre>
<p>剩下的就简单明了了:</p>
<pre><code>for group in groups_list:
for line in group:
if line[0][0] == 'E' and not find_match(line, group, EH, EF):
ace.append(line)
</code></pre>
<p>……我想应该就是这样!我不会保证这段代码会立即运行,但它至少应该给你一个好的起点</p>