<p>试试这个:</p>
<pre><code>a=['SqNr', 'Xpos', 'Ypos', 'ALPHA_J2000', 'DELTA_J2000', \
'UMAG', 'BMAG', 'VMAG', 'RMAG', 'IMAG', 'MB420MAG', \
'MB464MAG', 'MB485MAG', 'MB518MAG', 'MB571MAG', 'MB604MAG',\
'MB646MAG', 'MB696MAG', 'MB753MAG', 'MB815MAG', 'MB855MAG',\
'MB915MAG', 'UMAG_ERR', 'BMAG_ERR', 'VMAG_ERR', 'RMAG_ERR',\
'IMAG_ERR', 'MB420MAG_ERR', 'MB464MAG_ERR', 'MB485MAG_ERR',\
'MB518MAG_ERR', 'MB571MAG_ERR', 'MB604MAG_ERR', 'MB646MAG_ERR',\
'MB696MAG_ERR', 'MB753MAG_ERR', 'MB815MAG_ERR', 'MB855MAG_ERR',\
'MB915MAG_ERR', 'PHOTOZ', 'PHOTOZ_ERR', 'PHOTOZ2', 'PHOTOZ2_ERR',\
'Z_B', 'Z_B_MIN', 'Z_B_MAX', 'T_B', 'ODDS', 'CHISQUARED', 'Z_M',\
'Z_fp', 'Z_sp', 'Z_s']
mags = filter(lambda x: x[-3:]=='MAG', a)
mag_errs = filter(lambda x: x[-7:]=='MAG_ERR', a)
</code></pre>
<p><code>x[-3:]</code>取出每个字符串的最后三个字符,<code>x[-7:]</code>取出最后七个字符。如果它们分别匹配<code>MAG</code>或<code>MAG_ERR</code>,lambda将返回true并将相应的字符串放入输出列表。你知道吗</p>
<p>您还可以使用:</p>
<pre><code>mags = filter(lambda x: x.endswith('MAG'), a)
mag_errs = filter(lambda x: x.endswith('MAG_ERR'), a)
</code></pre>
<p>如果要使用正则表达式,可以使用列表:</p>
<pre><code>mags = [x for x in a if re.match(r'.*MAG$', x)]
mag_errs = [x for x in a if re.match(r'.*MAG_ERR$', x)]
</code></pre>
<p><code>MAG$</code>匹配行末尾的<code>MAG</code>(这就是<code>$</code>的意思),而<code>.*</code>匹配<code>MAG</code>或<code>MAG_ERR</code>之前的任何内容。你知道吗</p>
<p>您的解决方案将不起作用,因为您将所有标题合并到一个字符串中,使得以后很难将它们分开。使用<code>filter</code>或列表理解可以隐式地在数组中循环,拉出您感兴趣的项。你知道吗</p>