Python使用enumerate()时如何引用枚举首参数实现每日气温等待天数计算
enumerate() 使用的核心问题拆解
对枚举返回值的认知偏差
很多使用enumerate()时的报错都来源于对返回值的误解:这个函数每次循环会按顺序输出两个独立的单值,结构为(计数索引, 当前位置的遍历元素),没有任何可二次索引的能力。
你原代码里的错误点就来源于此:
- 把枚举返回的第二个值(实际是单个气温数值)命名为
distance、distance2,后续错误地对这些单值做索引操作,比如写distance2[j]、distance[k],本质是对整数类型做数组索引,会直接触发类型报错。 - 命名混淆导致逻辑错位:
distance对应的是当日气温值,不是用来计算间隔的距离变量,后续代码的计算逻辑从变量定义层面就出现了偏差。
匹配需求的正确实现(两层枚举思路)
你的需求是:为每个日期计算需要等待多少天才能遇到更高气温,没有后续更高气温则返回0。对应两层枚举的写法可以按照以下逻辑实现:
- 外层枚举遍历所有日期,拿到每个日期的原列表索引
i、当日气温值 - 内层从当前日期的下一个位置开始遍历,找到第一个气温更高的日期,计算两个日期的索引差就是等待天数
- 找到符合条件的日期就立刻停止内层遍历,避免多余计算;如果遍历完后续所有日期都没找到更高气温,就记录等待天数为0
可直接运行的正确代码如下:
nums = [1,5,20,9,3,10,50,7] waiting_result = [] # 外层枚举:i为日期在原列表的索引,cur_temp为当日气温 for i, cur_temp in enumerate(nums): wait_days = 0 # 内层枚举:切片取当前日期之后的所有气温,设置起始索引为i+1保证拿到原列表的真实位置 for j, next_temp in enumerate(nums[i+1:], start=i+1): if next_temp > cur_temp: wait_days = j - i break # 找到第一个更高气温就停止遍历 waiting_result.append(wait_days) print(waiting_result)
运行后输出完全匹配预期:[1,1,4,3,1,1,0,0]
原代码的逻辑偏差修正
你原代码的两个核心逻辑问题:
- 内层循环固定遍历
nums[1:],没有跟随外层的当前日期位置动态调整遍历起点,会跨日期计算无效的间隔值 - 计算间隔的语句完全误用了枚举返回的单值属性,即使修正语法错误,也无法得到正确的间隔结果
内容的提问来源于stack exchange,提问作者user15552191
相关产品推荐
相关产品推荐

