对比两个列表内容:判断list2元素是否以void函数形式存在于list1
问题解答
问题背景
给定两个列表:
list1 = ['', '', 'void KL15 ein', '{', '}', '', 'void Motor ein', '{', '}', ''] list2 = ['KL15 ein', 'Motor ein']
需求:判断list2中的每个元素,是否以void 元素的函数形式存在于list1中,要求使用变量判断,不能直接用固定字符串硬编码。同时询问是否必须拆分提取元素,以及是否存在无需拆分的方法。
解答
是否必须拆分提取元素?
不需要,完全可以不用拆分list1或list2的元素就能完成判断。
无需拆分的实现方法
方法1:遍历构造目标字符串匹配
直接遍历list2的每个元素,构造对应的void {元素}格式的字符串,然后检查该字符串是否存在于list1中:
for func_name in list2: target_func = f'void {func_name}' if target_func in list1: print(f"{func_name} 对应的void函数已存在") else: print(f"{func_name} 对应的void函数不存在")
这种方式全程用变量操作,没有固定字符串硬编码,也不需要拆分list1里的任何元素,直接利用列表的in成员判断完成匹配。
方法2:批量判断所有元素
如果需要一次性验证list2中所有元素对应的void函数是否都存在于list1,可以用生成器表达式配合all()函数:
all(f'void {name}' in list1 for name in list2)
该表达式会返回True(所有元素对应的void函数都存在)或False(至少有一个不存在)。
原理说明
因为list1中目标元素的格式是固定的void + 空格 + 函数名,所以反向构造目标字符串去匹配list1的元素,比拆分list1元素再提取函数名更高效、更简洁,避免了拆分字符串的额外操作。
内容的提问来源于stack exchange,提问作者Markus
相关产品推荐
相关产品推荐

