Python:如何根据关键词列表对字符串列表分组筛选?
按关键词分组匹配字符串子串的解决方案
输入数据
原字符串列表:
List_all = ["aawoobbcc", "aawoobbca", "aabbcskindd","asakindsbbss","wooedakse","sdadakindwsd","xxxxsdsd"]
关键词列表:
Key = ["woo","kind"]
错误代码分析
你尝试的两段代码存在逻辑/语法问题:
list_sub = [file for file in List_all if Key in file]:Key是列表,无法直接判断列表是否为字符串的子串,逻辑不成立,结果为空。list_sub = [file for file in List_all if k for k in Key in file]:语法错误,列表推导式的条件部分写法不符合Python规则,嵌套逻辑混乱。
正确实现
可以通过遍历每个关键词,分别筛选匹配的字符串来实现需求,有两种写法:
写法1:普通循环(易读)
List_all = ["aawoobbcc", "aawoobbca", "aabbcskindd","asakindsbbss","wooedakse","sdadakindwsd","xxxxsdsd"] Key = ["woo","kind"] result = [] # 遍历每个关键词 for keyword in Key: # 筛选出当前关键词对应的所有字符串 matched = [s for s in List_all if keyword in s] result.append(matched) print(result)
写法2:嵌套列表推导式(简洁)
List_all = ["aawoobbcc", "aawoobbca", "aabbcskindd","asakindsbbss","wooedakse","sdadakindwsd","xxxxsdsd"] Key = ["woo","kind"] result = [[s for s in List_all if k in s] for k in Key] print(result)
输出结果
运行后得到你需要的分组结果:
[ ["aawoobbcc", "aawoobbca","wooedakse"], ["aabbcskindd","asakindsbbss","sdadakindwsd"] ]
逻辑说明
- 外层遍历关键词列表
Key中的每个关键词 - 内层针对每个关键词,遍历
List_all筛选出包含该关键词的字符串,组成子列表 - 所有子列表最终组合成结果列表,自动忽略不匹配任何关键词的字符串(如
xxxxsdsd)
内容的提问来源于stack exchange,提问作者ravenni
相关产品推荐
相关产品推荐

