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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 04:00:59