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

如何根据另一列表的连续元素对目标列表进行分组?

列表分组问题的解决方案

这本质是分组问题,实现过程中通常会借助字典做中间映射,最终输出嵌套列表。

方法一:手动遍历+字典映射

字典的键值对结构天然适合存储“分组标识-对应元素列表”的关系,步骤如下:

  • 初始化空字典,键对应List1的元素,值对应List2中同组的对象列表
  • 用zip()同时遍历List1和List2的配对元素
  • 将每个对象添加到对应键的列表中
  • 最后将字典的values转换为列表,得到目标嵌套列表

示例代码:

list1 = [1,1,1,2,3,3,4,5,5]
list2 = ['objectA', 'objectB', 'objectC', 'objectD', 'objectE', 'objectF', 'objectG', 'objectH', 'objectI']

group_dict = {}
for key, obj in zip(list1, list2):
    # 若键不存在则初始化空列表
    group_dict.setdefault(key, []).append(obj)

list3 = list(group_dict.values())
# 结果:[['objectA', 'objectB', 'objectC'], ['objectD'], ['objectE', 'objectF'], ['objectG'], ['objectH', 'objectI']]

方法二:使用itertools.groupby

itertools.groupby是Python标准库中专门用于分组的工具,但注意它仅对连续的相同元素分组,因此需要先按分组键排序:

  • 用zip()配对List1和List2的元素,再按List1的元素排序
  • 用groupby按分组键分组,提取每组中的对象并组成列表

示例代码:

from itertools import groupby

list1 = [1,1,1,2,3,3,4,5,5]
list2 = ['objectA', 'objectB', 'objectC', 'objectD', 'objectE', 'objectF', 'objectG', 'objectH', 'objectI']

# 先按分组键排序配对元素
sorted_pairs = sorted(zip(list1, list2), key=lambda x: x[0])

# 分组并生成嵌套列表
list3 = [[obj for _, obj in group] for _, group in groupby(sorted_pairs, key=lambda x: x[0])]

总结:虽然最终输出是列表,但字典是实现分组逻辑的核心工具,这类问题属于分组映射场景,两种方法都能高效解决需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 09:55:24