如何编写Python函数提取数字列表中符合递增规则的元素序列
现有代码错误点
- 你使用
for i in L遍历得到的i是列表的元素值而非索引,直接用L[i+1]取值会把元素值当索引调用,只要元素值大于等于列表长度就会触发索引越界。 - 列表
append方法是原地操作,返回值为None,执行a = a.append(L[i])会直接将a覆盖为None,后续无法正常添加元素。 - 没有处理遍历边界:遍历到列表最后一个元素时,不存在
i+1对应的元素,必然会触发越界。 - 判断逻辑和需求不符:你当前的判断条件要求相邻元素差值严格为2,但你给出的示例中
3和4差值为1也符合要求,说明需要调整判断逻辑为后一个元素大于前一个元素即可。
正确实现
我们通过维护当前连续递增序列和最长递增序列的方式实现,代码如下:
def numIncreasing1(L): # 处理空列表边界 if not L: return [] max_sequence = current_sequence = [L[0]] for num in L[1:]: if num > current_sequence[-1]: current_sequence.append(num) # 更新最长序列 if len(current_sequence) > len(max_sequence): max_sequence = current_sequence.copy() else: # 不满足递增则重置当前序列 current_sequence = [num] return max_sequence
如果你确实需要相邻元素严格递增2的逻辑,只需要将判断条件num > current_sequence[-1]修改为num == current_sequence[-1] + 2即可。
验证
输入示例[5, 2, 1, 3, 4]调用该函数,返回结果为[1, 3, 4],符合要求。
内容的提问来源于stack exchange,提问作者Harsh1010
相关产品推荐
相关产品推荐

