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

嵌套列表处理:获取索引1最大值对应索引0最小的子列表

解决思路与代码实现

我来帮你搞定这个需求!咱们先理清楚核心目标:找到所有子列表中索引1的最大值,要是有多个子列表都达到这个最大值,就返回其中索引0最小的那个子列表。

先分析你原有代码的问题

你之前用collections.Counter(itertools.chain(*data))来统计元素次数,这个逻辑不对——它是把所有子列表的元素平铺后统计每个值出现的总次数,不是统计索引1等于最大值的子列表数量,所以没法准确判断重复情况。咱们换个更直接的方式来实现。

修改后的完整代码

data = [[12345678, 14, 1],[135763365, 14, 0],[135763365, 12, 0],[1234, 9, 0]]

def findBusiestPeriod():
    # 先处理空列表的边界情况
    if not data:
        return None
    
    # 第一步:找出所有子列表索引1的最大值
    max_index1_val = max(item[1] for item in data)
    
    # 第二步:筛选出所有索引1等于最大值的子列表(候选列表)
    candidate_lists = [item for item in data if item[1] == max_index1_val]
    
    # 第三步:在候选列表中,找到索引0值最小的子列表
    return min(candidate_lists, key=lambda x: x[0])

# 测试输出
print(findBusiestPeriod())  # 结果:[12345678, 14, 1]

代码简化版

如果想更简洁,还可以把筛选和取最小值合并成一步,用生成器表达式节省内存:

def findBusiestPeriod():
    if not data:
        return None
    max_val = max(item[1] for item in data)
    return min((item for item in data if item[1] == max_val), key=lambda x: x[0])

关键逻辑说明

  1. 获取最大值:用max(item[1] for item in data)生成器表达式,比列表推导更省内存,直接遍历所有子列表的索引1元素取最大值。
  2. 筛选候选列表:只保留索引1等于最大值的子列表,这样就把所有符合条件的目标子列表都圈出来了。
  3. 取索引0最小的子列表:min()函数通过key=lambda x: x[0]指定排序规则——按子列表的索引0值从小到大排序,最终返回最小的那个子列表。不管候选列表是1个还是多个,这个逻辑都能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:53:31