You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python入门:如何遍历列表实现Hunch检测并修复无输出代码?

Python列表遍历:修正Hunch检测代码

任务说明

列表data_list包含从输入读取的整数,代表一组数据序列。对于data_list中从索引1到倒数第二个索引的每个索引i:
若索引i处的元素同时大于其前一个元素和后一个元素,则该元素被称为hunch。如果索引i处的元素是hunch,输出'Hunch: ',后跟前一个元素、当前元素和后一个元素,元素间用空格分隔。

示例

输入为12 14 72 52时,预期输出:

  • Sequence: [12, 14, 72, 52]
  • Hunch: 14 72 52

基础代码(已提供)

tokens = input().split()

data_list = []
for token in tokens:
    data_list.append(int(token))

print(f'Sequence: {data_list}')

问题代码及错误分析

你补充的代码存在两个关键错误:

for i, data in enumerate(data_list[1: -2]):
    if data_list[i] > data_list[i - 1] and data_list[i] > data_list[i + 1]:
        print(f"Hunch: {data_list[i - 1]} {data_list[i]} {data_list[i + 1]}")
  1. 切片范围错误:data_list[1:-2]会跳过倒数第二个元素。比如示例中长度为4的列表,1:-2只包含索引1的元素(14),但我们需要检查的是索引1到倒数第二个索引(即索引2,对应元素72)。正确的切片应该是data_list[1:-1],或者直接遍历索引范围。
  2. 索引偏移错误:enumerate返回的i是切片后的局部索引(从0开始),不是原列表的真实索引。比如切片data_list[1:-1]的第一个元素对应原列表索引1,但代码中直接用data_list[i]会取原列表索引0的元素,导致判断逻辑完全错位。

修正后的代码

推荐写法:直接遍历正确索引范围

这种方式最直观,避免索引偏移问题:

# 遍历从索引1到倒数第二个索引(包含)
for i in range(1, len(data_list) - 1):
    prev = data_list[i-1]
    current = data_list[i]
    next_val = data_list[i+1]
    if current > prev and current > next_val:
        print(f"Hunch: {prev} {current} {next_val}")

可选写法:修正enumerate的索引偏移

如果坚持使用enumerate,需要将局部索引转换为原列表的真实索引:

# 遍历原列表中从索引1到倒数第二个元素的切片
for offset, current in enumerate(data_list[1:-1]):
    i = offset + 1  # 转换为原列表的真实索引
    prev = data_list[i-1]
    next_val = data_list[i+1]
    if current > prev and current > next_val:
        print(f"Hunch: {prev} {current} {next_val}")

验证结果

输入12 14 72 52时,修正后的代码会输出预期内容:

  • Sequence: [12, 14, 72, 52]
  • Hunch: 14 72 52

内容的提问来源于stack exchange,提问作者MrFruitNinja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 05:43:29