用较短列表中的匹配项替换较长列表中的项目

Replace items of a longer list with matches from a shorter list

我的目标是按如下方式比较两个列表:

获取 long_list 中的每个项目并将其子字符串与整个 short_list 进行比较。如果匹配,则将 short_list 中的项目添加到 new_list。如果没有匹配,则将 'NA' 插入到 new_list.

我当前解决方案的问题是,long_list 中的项目被插入 new_list 而不是 short_list 中的项目。我怎样才能访问 b.

long_list = ['ABC', 'ABC', 'EFG', 'HIJ', 'XYZ', 'ABC', 'XYZ', 'KLM']
short_list = ['aABCa', 'xYZz']

new_list = [x if any(x.lower() in b.lower() for b in short_list) else 'NA' for x in long_list]. 

当前输出:

new_list = ['ABC', 'ABC', 'NA', 'NA', 'XYZ', 'ABC', 'XYZ', 'NA']

目标:

new_list = ['aABCa', 'aABCa', 'NA', 'NA', 'xXYZz', 'aABCa', 'xXYZz', 'NA']

如果你绝对想用理解列表来做,你可以使用下面的

>>> new_list = [next((y for y in short_list if x.lower() in y.lower()),'NA') for x in long_list]
>>> new_list
['aABCa', 'aABCa', 'NA', 'NA', 'xYZz', 'aABCa', 'xYZz', 'NA']

但在这种情况下 for 循环可能更清晰