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]}")
- 切片范围错误:
data_list[1:-2]会跳过倒数第二个元素。比如示例中长度为4的列表,1:-2只包含索引1的元素(14),但我们需要检查的是索引1到倒数第二个索引(即索引2,对应元素72)。正确的切片应该是data_list[1:-1],或者直接遍历索引范围。 - 索引偏移错误:
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
相关产品推荐
相关产品推荐

