<p>也许试试这种逻辑?它只是有一个临时变量,跟踪您看到的最后一个操作ID,并在更改后切换开始/结束:</p>
<pre class="lang-py prettyprint-override"><code>In [21]: lines = open("test.csv").read().splitlines()
In [22]: lines
Out[22]:
['OperonID,GI,Synonym,Start,End,Strand,Length',
'1132034,397671780,RVBD_0002,2052,3260,+,402',
'1132034,397671781,RVBD_0003,3280,4437,+,385',
'1132034,397671782,RVBD_0004,4434,4997,+,187',
'1132035,397671783,RVBD_0005,5123,7267,+,714',
'1132035,397671784,RVBD_0006,7302,9818,+,838',
'1132036,397671786,RVBD_0007Ac,11421,11528,-,35',
'1132036,397671787,RVBD_0007Bc,11555,11692,-,45',
'1132037,397671792,RVBD_0012,14089,14877,+,262']
In [23]: cur_operonid = ''
In [24]: cur_end = None
In [27]: cur_start = None
...: for line in lines[1:]:
...: cols = line.split(','). # or line.split('\t') for tab-delimit
...: if cur_operonid != cols[0]: # New OperonID reached
...: if cur_start is not None:
...: print(f"{cur_operonid} went from {cur_start} to {cur_end}")
...: cur_operonid = cols[0]
...: cur_start = cols[3]
...: else:
...: cur_end = cols[4]
...:
1132034 went from 2052 to 4997
1132035 went from 5123 to 9818
1132036 went from 11421 to 11692
</code></pre>