仅使用列表和循环实现monotonic function检测的Python实现问题
sequence_monotonicity函数正确实现
实现思路
预先初始化4个布尔标记位,默认全部为True,后续遍历所有相邻元素对,只要任意一对不满足对应单调性条件,就把对应标记位设为False,遍历完成后将4个标记位按要求顺序组成列表返回即可,完全符合仅用列表和循环、不导入第三方库、不使用all/any内置函数的要求。
正确代码
def sequence_monotonicity(l): # 四个标记位分别对应<=、<、>=、>四个条件,初始默认全部满足 flag1 = True # 所有相邻a(n-1) <= a(n) flag2 = True # 所有相邻a(n-1) < a(n) flag3 = True # 所有相邻a(n-1) >= a(n) flag4 = True # 所有相邻a(n-1) > a(n) # 序列长度小于2时无相邻元素,所有条件均满足 if len(l) < 2: return [flag1, flag2, flag3, flag4] for i in range(1, len(l)): prev = l[i-1] curr = l[i] # 不满足<=则第一个标记位设为False if prev > curr: flag1 = False # 不满足<则第二个标记位设为False if prev >= curr: flag2 = False # 不满足>=则第三个标记位设为False if prev < curr: flag3 = False # 不满足>则第四个标记位设为False if prev <= curr: flag4 = False return [flag1, flag2, flag3, flag4]
测试验证
提供的三个测试用例运行结果完全符合预期:
sequence_monotonicity([1,2,3,4,5,6])返回[True, True, False, False]sequence_monotonicity([1,2,2,3])返回[True, False, False, False]sequence_monotonicity([1,0,-1,1])返回[False, False, False, False]
原代码错误原因
- 把四个条件的判断结果全部追加到了同一个x列表中,每次调用
true_false_checker时判断的是x中所有历史结果是否存在False,判断逻辑完全混乱 - 每次遍历相邻元素时都往结果列表z中追加4个布尔值,最终返回的z长度为
4*(序列长度-1),而不是要求的固定长度4,自然不符合输出要求
内容的提问来源于stack exchange,提问作者94forlife
相关产品推荐
相关产品推荐

