Python如何检查列表元素是否同时包含两个指定字符串
问题描述
我拥有多个类似如下格式的列表:
['my_name:Ruth','my_age:23','hobbies:everything']
需要验证每个列表是否同时包含my_name和my_age:
- 若列表仅含其中一个、或两者都不含,将其加入名为
bad的列表 - 若两者都包含,则加入名为
good的列表
目前仅能实现单个字符串的检查,代码如下:
def find_letter(letter, lst): return any(letter in word for word in lst) find_letter('my_name', first3) >>>True
请问如何编写代码同时实现两个字符串的检查逻辑?
解决方案
你可以基于现有函数扩展,或者编写模块化的验证逻辑来完成分类:
方法一:复用现有检查函数
直接调用你已有的find_letter函数,分别检查两个关键词,再根据结果分类:
def find_letter(letter, lst): return any(letter in word for word in lst) # 初始化分类列表 good = [] bad = [] # 示例待检查列表集合 all_lists = [ ['my_name:Ruth','my_age:23','hobbies:everything'], ['my_name:Bob','hobbies:reading'], ['my_age:25','hobbies:sports'], ['hobbies:gaming'] ] for lst in all_lists: has_name = find_letter('my_name', lst) has_age = find_letter('my_age', lst) # 仅当两个关键词同时存在时归入good if has_name and has_age: good.append(lst) else: bad.append(lst) print("good列表:", good) print("bad列表:", bad)
方法二:编写专门的验证函数
如果需要更清晰的模块化实现,可以单独封装判断逻辑:
def is_valid_list(lst): has_name = any('my_name' in word for word in lst) has_age = any('my_age' in word for word in lst) return has_name and has_age good = [] bad = [] all_lists = [ ['my_name:Ruth','my_age:23','hobbies:everything'], ['my_name:Bob','hobbies:reading'], ['my_age:25','hobbies:sports'], ['hobbies:gaming'] ] for lst in all_lists: if is_valid_list(lst): good.append(lst) else: bad.append(lst)
两种方法的核心逻辑一致:分别确认列表中存在包含my_name和my_age的元素,只有两者同时满足时,才将该列表归入good,否则放入bad。
内容的提问来源于stack exchange,提问作者Reut
相关产品推荐
相关产品推荐

