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

如何用Python itertools按嵌套列表末尾元素分组?解决分组异常

按子列表末尾元素分组的正确实现方法

用itertools.groupby的正确做法

itertools.groupby的核心特性是只对连续的相同键元素分组,你的原列表中末尾元素顺序是3、2、3、2,相同键的元素不连续,所以才会出现每个子列表单独成组的错误。要解决这个问题,需要先把列表按末尾元素排序,让相同键的元素连续,再执行分组操作。

代码示例:

import itertools

l = [[15.0, 10265.0, 1860.0, 142600.0, 3],
     [12.0, 14631.0, 3298.0, 153100.0, 2],
     [22.0, 1707.0, 296.0, 126600.0, 3],
     [7.0, 1737.0, 290.0, 147000.0, 2]]

# 先按子列表末尾元素排序,让相同键的元素连续
sorted_l = sorted(l, key=lambda x: x[-1])
# 按末尾元素分组
groups = []
for key, group in itertools.groupby(sorted_l, key=lambda x: x[-1]):
    groups.append(list(group))

print(groups)
# 输出结果:
# [[[12.0, 14631.0, 3298.0, 153100.0, 2], [7.0, 1737.0, 290.0, 147000.0, 2]], [[15.0, 10265.0, 1860.0, 142600.0, 3], [22.0, 1707.0, 296.0, 126600.0, 3]]]

其他实现方式(无需排序)

如果不想改变原列表的元素顺序,可以用字典手动分组,这种方式更灵活,不依赖元素的连续性:

方法1:用普通字典实现

l = [[15.0, 10265.0, 1860.0, 142600.0, 3],
     [12.0, 14631.0, 3298.0, 153100.0, 2],
     [22.0, 1707.0, 296.0, 126600.0, 3],
     [7.0, 1737.0, 290.0, 147000.0, 2]]

group_dict = {}
for item in l:
    key = item[-1]
    if key not in group_dict:
        group_dict[key] = []
    group_dict[key].append(item)

# 转换为目标列表格式
groups = list(group_dict.values())
print(groups)
# 输出结果:
# [[[15.0, 10265.0, 1860.0, 142600.0, 3], [22.0, 1707.0, 296.0, 126600.0, 3]], [[12.0, 14631.0, 3298.0, 153100.0, 2], [7.0, 1737.0, 290.0, 147000.0, 2]]]

方法2:用collections.defaultdict简化代码

from collections import defaultdict

l = [[15.0, 10265.0, 1860.0, 142600.0, 3],
     [12.0, 14631.0, 3298.0, 153100.0, 2],
     [22.0, 1707.0, 296.0, 126600.0, 3],
     [7.0, 1737.0, 290.0, 147000.0, 2]]

group_dict = defaultdict(list)
for item in l:
    group_dict[item[-1]].append(item)

groups = list(group_dict.values())
print(groups)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 17:17:35