<p>所使用的字典是一个以文本/字符串键和列表作为值的字典。你知道吗</p>
<p><code>first_part_dict[key].append(i)</code>所做的是将<code>i</code>的值附加(或添加)到与字典<code>first_part_dict</code>的键<code>key</code>对应的列表中。你知道吗</p>
<p>如果键是<code>ADX06</code>,那么字典将从<code>{'ADX06': []}</code>转到<code>{'ADX06': [1]}</code>,如果<code>i</code>的值是1。你知道吗</p>
<hr/>
<p>我将放一个演练来说明:</p>
<pre><code>mylist = ['Probes', 'Gene.symbol', 'Gene.Title', 'GO1', 'GO2', 'GO3', 'ADX_KD_06.ip', 'ADX_KD_24.ip', 'ADX_LG_06.ip'
for i, string in enumerate(mylist):
matched = regex.match(string)
if not matched:
continue
rg1, rg2, rg3, rg4 = matched.groups()
key = rg1 + rg3
if i < cutoff_index:
first_part_dict[key].append(i)
else:
second_part_dict[key].append(i)
</code></pre>
<p>当您第一次通过循环时,会得到<code>i = 0</code>和<code>string = 'Probes'</code>。由于<code>Probes</code>与regex不匹配,循环将通过<code>continue</code>跳到下一项。你知道吗</p>
<p>这一次,你得到了<code>i = 1</code>和<code>string = 'Gene.symbol</code>。同样,字符串与正则表达式不匹配,因此您可以跳到下一项。这个过程一直持续到您得到第7项:<code>ADX_KD_06.ip</code>。这里有<code>i = 6</code>和<code>string = 'ADX_KD_06.ip'</code>,它们与regex匹配。你知道吗</p>
<p>从中可以得到<code>rg1 = ADX</code>、<code>rg2 = LG</code>、<code>rg3 = 06</code>和<code>rg4 = ip</code>。这样,键就变成了<code>ADX06</code>,您就可以执行<code>first_part_dict[key].append(i)</code>。你知道吗</p>
<p>这将在字典<code>first_part_dict</code>中创建键<code>ADX06</code>,并将<code>6</code>附加到其值列表中。现在,dict有<code>{'ADX06': [6]}</code>。然后循环继续下一项。你知道吗</p>
<p>这一次,我们有<code>i = 7</code>和<code>string = 'ADX_KD_24.ip'</code>。这与regex匹配,几行之后,您将执行<code>first_part_dict[key].append(i)</code>。你知道吗</p>
<p>这将在字典<code>first_part_dict</code>中创建键<code>ADX24</code>,并将<code>7</code>附加到其值列表中。现在,dict有<code>{'ADX06': [6], 'ADX24': [7]}</code>。然后循环继续下一项。你知道吗</p>
<p>这一次,我们有<code>i = 8</code>和<code>string = 'ADX_LG_06.ip'</code>。这与regex匹配,几行之后,您将再次执行<code>first_part_dict[key].append(i)</code>。你知道吗</p>
<p>这将在字典中创建键<code>ADX06</code>。。。但是等等!该键已经存在,因此它会将<code>8</code>附加到其现有的值列表中。现在,dict有<code>{'ADX06': [6, 8], 'ADX24': [7]}</code>。你知道吗</p>
<p>这会一直持续下去,直到列表中的所有项目都得到处理。你知道吗</p>