我有两个列表,输入看起来像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
的字符串,其中prefix
和suffix
不包含_
,并且假设我们要将项目保留在list1
中,除非它们与list2
中的prefix
完全匹配,那么可以这样做:
prefSet = {x.split('_')[0] for x in list2}
print( [x for x in list1 if x not in prefSet] )