gpt4 book ai didi

python - 在字符串列表中查找模式

转载 作者:行者123 更新时间:2023-11-28 21:18:45 24 4
gpt4 key购买 nike

我有一个带有标题的数组,我使用以下命令获取标题:

>>> headers=list(data.dtype.names)
>>> headers
['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']

我想制作一个列表,其中包含所有末尾带有 MAG 模式的字符串,另一个包含 MAG_ERR。我怎么能那样做?我在考虑使用以下几行来获得正确的结果:

import re  
pattern='MAG'
re.match(r'(%s)+$' % pattern, "".join(headers))

但是它没有返回任何东西。我怎样才能得到正确的答案:

a=['UMAG', 'BMAG', 'VMAG', 'RMAG', 'IMAG', 'MB420MAG',\
'MB464MAG', 'MB485MAG', 'MB518MAG', 'MB571MAG', 'MB604MAG',\
'MB646MAG', 'MB696MAG', 'MB753MAG', 'MB815MAG', 'MB855MAG','MB915MAG']

最佳答案

试试这个:

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)

x[-3:] 提取每个字符串的最后三个字符,x[-7:] 提取最后七个字符。如果它们分别匹配 MAGMAG_ERR,则 lambda 返回 true,过滤器将相应的字符串放入输出列表。

您还可以使用:

mags     = filter(lambda x: x.endswith('MAG'), a)
mag_errs = filter(lambda x: x.endswith('MAG_ERR'), a)

如果你想使用正则表达式,你可以使用列表理解:

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)]

MAG$ 匹配行尾的 MAG(这就是 $ 的意思)和 .* 匹配 MAGMAG_ERR 之前的任何内容。

您的解决方案将不起作用,因为您将所有 header 合并到一个字符串中,这使得以后很难将它们分开。使用 filter 或列表推导式可以让您隐式循环遍历数组,找出您感兴趣的项目。

关于python - 在字符串列表中查找模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26005327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com