Python列表匹配问题:匹配L1元素到L2添加标识时结果重复
解决Python列表匹配标记重复问题
原始数据
L1 =['0-0-3-0-0-80-0', '0-0-3-0-0-82-0'] L2 = [['0', '4', '0', '0', '42', '71','42','0-0-0-0-0-4-0'], ['0', '4', '2', '0', '42', '72','42', '0-0-0-1-0-4-2'], ['0', '80', '0', '0', '42', '81','43', '0-0-3-0-0-80-0'], ['0', '80', '0', '1', '21', '81','43', '0-0-3-0-0-80-0'], ['0', '81', '0', '0', '43', '82', '21', '0-0-3-1-0-81-0'], ['0', '82', '0', '0', '21', '83', '43', '0-0-3-0-0-82-0']]
需求
遍历L2的每个子列表,若子列表中包含L1里的任意元素,就在子列表末尾添加"found";否则添加空字符串"",最终得到预期结果:
L2 = [['0', '4', '0', '0', '42', '71','42','0-0-0-0-0-4-0',""], ['0', '4', '2', '0', '42', '72','42', '0-0-0-1-0-4-2',""], ['0', '80', '0', '0', '42', '81','43', '0-0-3-0-0-80-0',"found"], ['0', '80', '0', '1', '21', '81','43', '0-0-3-0-0-80-0',"found"], ['0', '81', '0', '0', '43', '82', '21', '0-0-3-1-0-81-0',""], ['0', '82', '0', '0', '21', '83', '43', '0-0-3-0-0-82-0',"found"]]
原代码问题分析
原代码嵌套遍历L1的每个元素,每遍历一个L1元素就往result里添加一次子列表的副本,导致每个L2子列表被重复添加len(L1)次(这里是2次),最终结果出现重复。
for i in range(0,len(L2)): for x in L1: if x in L2[i]: result.append(L2[i]+["found"]) else: result.append(L2[i]+[""])
正确解法
只需要对每个L2子列表做一次判断:检查是否包含L1中的任意元素,再添加对应标记即可,无需遍历L1所有元素重复添加。
方法1:新建结果列表
result = [] for sublist in L2: # 用any()快速判断是否存在匹配元素 if any(item in sublist for item in L1): result.append(sublist + ["found"]) else: result.append(sublist + [""])
方法2:直接修改原L2列表
如果不需要保留原L2的原始状态,可以直接在原列表上修改:
for sublist in L2: # 三元表达式简化判断逻辑 sublist.append("found" if any(item in sublist for item in L1) else "")
两种方法都能得到符合预期的结果,不会出现重复问题。
内容的提问来源于stack exchange,提问作者user289017
相关产品推荐
相关产品推荐

