如何验证字符串列表是否符合自定义序列['PRE','IMP','POST','BO']的排序规则
自定义序列校验实现方案
需求说明
需要校验字符串列表是否严格遵循自定义顺序 ['PRE', 'IMP', 'POST', 'BO'],列表中元素允许重复,但不能出现顺序颠倒(例如IMP不能出现在PRE之前,PRE不能出现在IMP之后等)。
- 符合要求的示例列表:
['PRE', 'PRE', 'PRE','IMP', 'IMP','POST','BO', 'BO'] - 不符合要求的示例列表:
['IMP', 'PRE', 'PRE','IMP', 'IMP','POST','BO', 'BO']
实现思路
- 给自定义顺序的每个元素分配优先级索引,方便后续比较
- 遍历目标列表,跟踪当前已经出现过的最高优先级
- 若遍历过程中出现优先级低于当前最高值的元素,直接判定顺序错误
代码实现
def is_correct_order(lst, custom_order): # 建立元素到优先级的映射 order_map = {item: idx for idx, item in enumerate(custom_order)} current_max_priority = -1 for item in lst: # 处理不在自定义序列中的元素(若不需要可删除此判断) if item not in order_map: return False current_priority = order_map[item] # 若当前元素优先级低于已出现的最高优先级,说明顺序错误 if current_priority < current_max_priority: return False # 更新当前最高优先级 if current_priority > current_max_priority: current_max_priority = current_priority return True # 测试示例 custom_order = ['PRE', 'IMP', 'POST', 'BO'] correct_list = ['PRE', 'PRE', 'PRE','IMP', 'IMP','POST','BO', 'BO'] incorrect_list = ['IMP', 'PRE', 'PRE','IMP', 'IMP','POST','BO', 'BO'] # 验证正确列表 print("correct" if is_correct_order(correct_list, custom_order) else "incorrect") # 验证错误列表 print("correct" if is_correct_order(incorrect_list, custom_order) else "incorrect")
代码说明
order_map字典将自定义序列中的元素映射为对应的索引值,作为优先级判断依据- 遍历列表时,每个元素的优先级必须大于等于之前出现过的最高优先级,否则直接返回
False - 若列表中存在自定义序列外的元素,默认判定为错误(可根据需求移除该判断逻辑)
内容的提问来源于stack exchange,提问作者JLuka
相关产品推荐
相关产品推荐

