如何检查列表仅包含Pa12和Co12这两个指定值?
检查列表是否仅包含指定元素的实现方法
你可以通过以下几种简洁的方式实现这个检查逻辑,这里以Python为例:
方法一:利用集合的子集判断(推荐)
将列表转换为集合去重后,判断其是否是允许元素集合的子集。这种方法代码简洁,效率较高:
# 定义允许的元素集合 allowed_elements = {"Pa12", "Co12"} # 测试示例1:包含非法元素,检查失败 test_list1 = ["Pa12", "Co12", "Pa12", "Co12", "Fi12", "Co12"] print(set(test_list1).issubset(allowed_elements)) # 输出: False # 测试示例2:仅包含允许元素,检查通过 test_list2 = ["Pa12", "Pa12", "Co12", "Pa12", "Co12"] print(set(test_list2).issubset(allowed_elements)) # 输出: True # 测试示例3:仅包含单一允许元素,检查通过 test_list3 = ["Pa12", "Pa12"] print(set(test_list3).issubset(allowed_elements)) # 输出: True
原理:set(test_list)会自动去除列表中的重复元素,issubset()方法会判断集合中的所有元素是否都存在于allowed_elements中,只要有一个元素不在,就返回False。
方法二:遍历列表逐个检查
如果需要在遇到第一个非法元素时就终止检查(适合处理超大列表,节省性能),可以用遍历的方式:
allowed_elements = {"Pa12", "Co12"} test_list = ["Pa12", "Co12", "Pa12", "Co12", "Fi12", "Co12"] is_valid = True for item in test_list: if item not in allowed_elements: is_valid = False break # 找到非法元素后立即停止遍历 print(is_valid) # 输出: False
注意:把允许的元素存在集合中而非列表中,是因为集合的in操作时间复杂度为O(1),比列表的O(n)更快,尤其是当允许元素数量较多时差异更明显。
内容的提问来源于stack exchange,提问作者amadain
相关产品推荐
相关产品推荐

