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

如何从嵌套列表中查找按长度排序的第k大子列表(同长度取后出现项)

实现方案

核心逻辑

你遇到的问题本质是:第k大指的是长度的排名为第k,相同长度的子列表需要取原列表中出现位置最靠后的项,因此不能直接对排序后的列表取倒序索引。

实现步骤

  1. 按子列表长度对原列表分组,同长度的子列表在组内保留原列表的出现顺序
  2. 将所有分组按长度从大到小排序,得到长度的排名序列
  3. 取排名第k位对应分组的最后一个元素,即为目标结果

代码实现

from collections import defaultdict

original_list = [[1, 2, 3, 4], [1, 9, 12], [9], [8], [7, 8, 9, 10, 12, 16], [7, 8, 9, 10], [4, 5, 6, 7], [6, 7, 8, 9, 10, 11]]

# 按长度分组,同长度保留原顺序
length_groups = defaultdict(list)
for sub in original_list:
    length_groups[len(sub)].append(sub)

# 按长度降序排列分组
sorted_groups = sorted(length_groups.items(), key=lambda x: -x[0])

def get_kth_largest(k):
    # 取第k大对应的分组,返回组内最后一个(原顺序最靠后的)元素
    return sorted_groups[k-1][1][-1]

# 测试
print(get_kth_largest(1)) # 输出 [6, 7, 8, 9, 10, 11]
print(get_kth_largest(2)) # 输出 [4, 5, 6, 7]

基于现有sorted_list的实现

如果你要基于已经生成的sorted_list做处理,逻辑完全一致:

sorted_list = [[9], [8], [1, 9, 12], [1, 2, 3, 4], [7, 8, 9, 10], [4, 5, 6, 7], [7, 8, 9, 10, 12, 16], [6, 7, 8, 9, 10, 11]]

length_groups = defaultdict(list)
for sub in sorted_list:
    length_groups[len(sub)].append(sub)

sorted_groups = sorted(length_groups.items(), key=lambda x: -x[0])

def get_kth_largest(k):
    return sorted_groups[k-1][1][-1]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:09:01