嵌套列表处理:获取索引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])
关键逻辑说明
- 获取最大值:用
max(item[1] for item in data)生成器表达式,比列表推导更省内存,直接遍历所有子列表的索引1元素取最大值。 - 筛选候选列表:只保留索引1等于最大值的子列表,这样就把所有符合条件的目标子列表都圈出来了。
- 取索引0最小的子列表:
min()函数通过key=lambda x: x[0]指定排序规则——按子列表的索引0值从小到大排序,最终返回最小的那个子列表。不管候选列表是1个还是多个,这个逻辑都能正常工作。
内容的提问来源于stack exchange,提问作者zservies
相关产品推荐
相关产品推荐

