如何在Python列表中交替查找高低值及其对应索引?
交替查找列表中高低值及对应索引的实现
给定列表:
myList = [10,12,18,20,25,18,17,16,10,20,30,35,40,35,30,20,15]
需求是按以下规则交替查找值及对应索引,直至列表末尾:
- 第一步:查找列表中第一个出现的最高值
- 第二步:查找该最高值之后的第一个最低值
- 第三步:查找该最低值之后的第一个最高值
- 以此类推,交替切换查找最高/最低值的逻辑
解决方案代码
def alternate_find_extremes(lst): result = [] current_pos = 0 # 初始设定:先找最大值 seek_max = True while current_pos < len(lst): # 截取当前位置到列表末尾的子序列 sub_list = lst[current_pos:] # 根据当前需求获取极值 if seek_max: extreme_value = max(sub_list) else: extreme_value = min(sub_list) # 计算极值在原列表中的索引 extreme_index = current_pos + sub_list.index(extreme_value) # 记录结果 result.append((extreme_value, extreme_index)) # 切换查找类型,更新起始位置 seek_max = not seek_max current_pos = extreme_index + 1 return result # 测试代码 myList = [10,12,18,20,25,18,17,16,10,20,30,35,40,35,30,20,15] results = alternate_find_extremes(myList) for val, idx in results: print(f"值: {val}, 索引: {idx}")
执行结果
值: 25, 索引: 4 值: 10, 索引: 8 值: 40, 索引: 12 值: 15, 索引: 16
代码说明
- 用
current_pos标记每次查找的起始位置,确保每次只在之前极值的后续元素中查找 - 通过
seek_max布尔值切换查找最大值/最小值的逻辑 - 利用
sub_list.index(extreme_value)获取极值在子序列中第一次出现的位置,加上current_pos得到原列表的索引 - 每次找到极值后,更新起始位置为极值索引+1,避免重复查找同一个元素
内容的提问来源于stack exchange,提问作者Chaminda Kumara
相关产品推荐
相关产品推荐

