用较短列表中的匹配项替换较长列表中的项目
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 循环可能更清晰
我的目标是按如下方式比较两个列表:
获取 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 循环可能更清晰