Python中如何对比两个列表,移除首个匹配元素前的所有元素
移除列表中首个匹配另一列表元素之前的所有元素
需求:有两个列表,需要移除第一个列表中首个出现在第二个列表中的元素之前的所有元素,且该操作仅执行一次。
示例输入:
list1 = ['a','d','k','1','3','a','f','3'] list2=['1','2','3','4','5']
预期输出:
listResult=['1','3','a','f','3']
说明:在list1中,'1'是第一个属于list2的元素,因此移除它之前的所有元素;后续出现的'3'虽然也在list2中,但不会再触发移除操作。
你之前用dropwhile只能指定单个元素,现在可以通过以下两种方式实现需求:
方法一:遍历查找首个匹配索引后切片
list1 = ['a','d','k','1','3','a','f','3'] list2 = ['1','2','3','4','5'] # 转集合提升查找效率 target_set = set(list2) # 遍历找到第一个符合条件的元素索引 for idx, item in enumerate(list1): if item in target_set: result = list1[idx:] break else: # 没有找到匹配元素时返回原列表副本 result = list1.copy() print(result)
方法二:改造dropwhile的判断逻辑
from itertools import dropwhile list1 = ['a','d','k','1','3','a','f','3'] list2 = ['1','2','3','4','5'] target_set = set(list2) # 用dropwhile跳过所有不在目标集合中的元素,直到找到第一个匹配项 result = list(dropwhile(lambda x: x not in target_set, list1)) print(result)
注意:把list2转成集合是因为集合的成员查询效率远高于列表,当list2元素较多时能明显提升性能。
内容的提问来源于stack exchange,提问作者Rashmi
相关产品推荐
相关产品推荐

