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

Python如何将整数列表或频次字典转换为分组聚合的嵌套列表

解决方法

方法1:基于已有频次字典d实现(最便捷)

你已经统计好了每个数字的出现频次,直接对字典的键升序排序后通过列表推导式生成即可,一行代码就能完成:

final = [[k] * v for k, v in sorted(d.items())]

逻辑说明:sorted(d.items())会把字典的键值对按数字从小到大排序,遍历每个键值对时,用[k] * v生成对应长度的子列表,刚好匹配你需要的结构。

方法2:从原始列表original直接生成

如果不需要复用你之前生成的d和first_try,可以用Python标准库的collections.Counter直接统计频次后生成:

from collections import Counter

# 统计元素出现频次
count_dict = Counter(original)
# 生成目标嵌套列表
final = [[k] * v for k, v in sorted(count_dict.items())]

方法3:基于已有first_try合并实现

如果你要基于已经生成的first_try做合并,直接遍历合并相同元素的子列表即可:

final = []
current_group = []
prev_num = None

for sub_list in first_try:
    num = sub_list[0]
    if num == prev_num or prev_num is None:
        current_group.append(num)
    else:
        final.append(current_group)
        current_group = [num]
    prev_num = num
# 追加最后一组数据
if current_group:
    final.append(current_group)

补充说明

如果你的需求不需要按数字升序排列,而是要保持数字在原始列表中首次出现的顺序,只需要把上述代码中的sorted(d.items())替换为dict.fromkeys(original).keys()即可,示例如下:

final = [[k] * d[k] for k in dict.fromkeys(original)]
# 输出顺序和原始列表首次出现顺序一致:[[1], [6,6,6], [3,3], [9,9], [4], [5], [2], [7], [8]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:54:01