Python中如何移除列表中与另一列表存在相同前缀的元素
问题描述
我有两个Python列表:
list_1 = ["ABC_123,Hello,World", "DEF_456,Hello,World"] list_2 = ["ABC_123,Something,Else", "KOR_729,Something,Else"]
需要移除list_1中那些**前缀(逗号分隔的第一部分)**和list_2里任意元素前缀相同的项,最终得到的结果应该是:
list_3 = ["DEF_456,Hello,World"]
解决方案
步骤1:提取list_2里的所有前缀
先把list_2中每个元素的前缀(逗号前的部分)提取出来,存成一个集合——集合的查询速度比列表快很多,数据量大的时候优势更明显:
prefixes = {item.split(',')[0] for item in list_2}
步骤2:过滤list_1
遍历list_1,只保留前缀不在上面集合里的元素:
list_3 = [item for item in list_1 if item.split(',')[0] not in prefixes]
完整可运行代码
list_1 = ["ABC_123,Hello,World", "DEF_456,Hello,World"] list_2 = ["ABC_123,Something,Else", "KOR_729,Something,Else"] # 提取list_2的前缀集合 prefixes = {item.split(',')[0] for item in list_2} # 过滤得到目标列表 list_3 = [item for item in list_1 if item.split(',')[0] not in prefixes] print(list_3) # 输出: ['DEF_456,Hello,World']
补充说明
split(',')[0]的作用是把字符串按逗号分割,取第一部分,确保只匹配前缀,不会误判逗号后面的内容- 如果你的前缀分隔符不是逗号,只需要把
split(',')里的逗号换成对应的分隔符就行
内容的提问来源于stack exchange,提问作者Neniuk
相关产品推荐
相关产品推荐

