Python实现删除main_list第二个元素中与out_list匹配的标签方法咨询
Python标签过滤实现方案
核心实现逻辑
- 先将out_list转换为集合类型,提升标签匹配的查找效率
- 遍历main_list的每个子元素,取出索引为1的标签字符串,按逗号切割为标签列表
- 过滤掉所有存在于out集合中的标签,再将剩余标签重新拼接为逗号分隔的字符串
- 用处理后的字符串替换子元素中原有的标签值即可
原有代码问题修正说明
range(main_list)语法错误,range方法需要传入整数长度参数,应改为range(len(main_list)),更推荐直接遍历子元素写法更简洁- 代码中的
m变量未定义,实际需要取子列表索引为1的标签值进行切割 - 缺少匹配后过滤、重新拼接字符串并回写到原列表的逻辑
完整可运行代码
# 测试数据集 out_list = ['collar', 'floralprint', 'longsleeve', 'pink', 'pintuck', 'red', 'shirt', 'sleeve', 'sleeveless', 'split', 'trim', 'tunic', 'v-neck'] main_list=[['img/Sheer_Pleated-Front_Blouse/img_00000001.jpg', 'pleated,sheer', '0'], ['img/Sheer_Pleated-Front_Blouse/img_00000002.jpg', 'pleated,sheer', '0'], ['img/Sheer_Pleated-Front_Blouse/img_00000009.jpg', 'sheer', '0'], ['img/Sheer_Pleated-Front_Blouse/img_00000010.jpg', 'sheer,woven', '0'], ['img/Sheer_Pleated-Front_Blouse/img_00000014.jpg', 'summer', '0'], ['img/Sleeveless_Vented_Blouse/img_00000037.jpg', 'printed,sleeveless,shirt,chiffon,floral', '0'], ['img/Sleeveless_Vented_Blouse/img_00000038.jpg', 'printed,ruffle', '0'], ['img/Sleeveless_Vented_Blouse/img_00000040.jpg', 'sleeveless', '0'] ] # 转换为集合提升查找效率 out_set = set(out_list) # 遍历处理每个子列表 for item in main_list: # 切割标签为列表 tags = item[1].split(',') # 过滤不在out_set中的标签 filtered_tags = [tag for tag in tags if tag not in out_set] # 重新拼接为字符串替换原位置的值 item[1] = ','.join(filtered_tags) # 打印处理后的结果 for item in main_list: print(item)
运行结果验证
处理后的main_list符合预期,典型测试项结果如下:
- 原匹配sleeveless的子列表:
['img/Sleeveless_Vented_Blouse/img_00000037.jpg', 'printed,sleeveless,shirt,chiffon,floral', '0'] - 处理后结果:
['img/Sleeveless_Vented_Blouse/img_00000037.jpg', 'printed,chiffon,floral', '0'] - 原仅含sleeveless的子列表:
['img/Sleeveless_Vented_Blouse/img_00000040.jpg', 'sleeveless', '0'] - 处理后结果:
['img/Sleeveless_Vented_Blouse/img_00000040.jpg', '', '0']
内容的提问来源于stack exchange,提问作者SoulD82
相关产品推荐
相关产品推荐

