比较2个列表并获得列表中不匹配的项目



我有两个列表,输入看起来像list1=["car", "boat", "sun", "ride"]list2=["car_1", "car_2", sun_3"]。我的预期输出应该像output=["boat", "ride"]一样。我的代码片段供您参考:

For i in list1:
If any( i in e for e in list2):
Print (i)

我的代码没有在列表1中循环。请纠正我遗漏的内容。

您只需使用列表理解,然后为list1:中的每个值检查list2的每个项目中的部分字符串

output=[v for v in list1 if not any(v in x for x in list2)]
print(output)
['boat', 'ride']

代码中的逻辑只需进行一次修改即可工作:在any()之前插入not。要构造列表output,请将print()语句替换为output.append(i),其中output在循环之前初始化为output = []

有一种可供选择的方法可以针对更受限制的匹配类型进行优化。假设list2只包含形式为prefix + '_' + suffix的字符串,其中prefixsuffix不包含_,并且假设我们要将项目保留在list1中,除非它们与list2中的prefix完全匹配,那么可以这样做:

prefSet = {x.split('_')[0] for x in list2}
print( [x for x in list1 if x not in prefSet] )

最新更新