Python自定义字符串列表顺序验证函数故障排查:结果不符预期
问题分析与修正
你的函数存在两个核心问题,导致无法正确验证列表顺序:
1. 语法与变量使用错误
在验证顺序的循环中:
for index in range(len(order) -1): if index[item] < position[order[i+1]]: return False
index是循环的整数索引,不能用index[item]这种下标访问方式,此处应取当前等级的最后出现位置position[order[index]]i变量未定义,需用当前循环的index来访问下一个等级order[index+1]
2. 逻辑判断错误
原判断条件完全写反:我们需要确保前面等级的最后出现位置 ≤ 后面等级的最后出现位置,如果前面等级的最后出现位置 > 后面等级的最后出现位置,说明存在低优先级等级出现在高优先级等级之前的情况,应返回False。同时还要处理“后面等级未在列表中出现”的合法情况。
修正后的函数
order = ['critical', 'high', 'medium', 'low', 'info'] def verify_order(lst): order = ['critical','high', 'medium', 'low', 'info'] # 记录每个等级最后一次出现的索引,初始为-1(表示未出现) position = {item: -1 for item in order} for i, item in enumerate(lst): if item in order: position[item] = i # 更新为最后出现的索引 # 按指定顺序检查每个等级的最后出现位置 for idx in range(len(order) - 1): current_level = order[idx] next_level = order[idx + 1] # 如果当前等级最后出现位置 > 下一个等级最后出现位置,且下一个等级确实出现过,说明顺序错误 if position[current_level] > position[next_level] and position[next_level] != -1: return False return True # 测试示例 mylist1 = ['high','medium', 'info', 'info'] print(verify_order(mylist1)) # 输出 True mylist2 = ['medium', 'high', 'low', 'medium', 'low', 'high'] print(verify_order(mylist2)) # 输出 False
逻辑说明
- 遍历列表,记录每个等级最后一次出现的索引,以此判断是否存在低优先级等级出现在高优先级等级之后的情况。
- 按指定顺序遍历等级列表:
- 若当前等级的最后出现位置晚于下一个等级的最后出现位置,且下一个等级确实在列表中出现过,说明顺序违规,返回
False - 若下一个等级未在列表中出现(位置为-1),属于合法情况(比如列表只有前几个等级),无需返回
False
- 若当前等级的最后出现位置晚于下一个等级的最后出现位置,且下一个等级确实在列表中出现过,说明顺序违规,返回
内容的提问来源于stack exchange,提问作者Harshal Doshi
相关产品推荐
相关产品推荐

