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

如何基于Python中列表l2的分值规则对列表l1有序分组?

Python列表按规则分组问题

给定两个Python列表:

l1 = ['a','b','c','d','e','f','g','h']
l2 = [True, True, True, False, False, True, False, True]

需要按顺序遍历元素,依据以下规则对l1进行分组,最终得到结果:groups = [['a','b','c'],['d','e'],['f','g','h']]

  • 每个True对应元素计1分,每个False对应元素计2分;
  • 每组的总分不能超过4分;
  • 必须严格按照列表原有顺序分组。

你尝试的代码

l1 = ["a","b","c","d","e","f","g","h"]
l2 = [True, True, True, False, False, True, False, True]
groups = []
count = 1
index = 0
while index <= len(l1):
    group = []
    for e,b in zip(l1,l2):
        if len(group) <= 3:
            if b is True:
                group.append(e)
                index += 1
            else:
                group.append(e)
                group.append("False")
                index += 1
        else:
            groups.append(group)
            group = []
            index -= 1

代码问题分析

这段代码存在几个核心问题:

  1. 逻辑混乱:嵌套while和for循环导致遍历逻辑重复,index的增减处理错误,容易引发死循环或者元素遗漏;
  2. 规则误解:错误地给False对应的元素额外添加了字符串"False",完全不符合分组规则;
  3. 判断依据错误:用组的长度(len(group) <=3)代替分数判断,和题目要求的“总分不超过4分”规则不符。

正确解法代码

l1 = ['a','b','c','d','e','f','g','h']
l2 = [True, True, True, False, False, True, False, True]

groups = []
current_group = []
current_score = 0

for elem, flag in zip(l1, l2):
    # 计算当前元素对应的分数
    score = 1 if flag else 2
    # 检查加入当前组后总分是否超标
    if current_score + score <= 4:
        current_group.append(elem)
        current_score += score
    else:
        # 当前组已达上限,存入结果列表,新建组存入当前元素
        groups.append(current_group)
        current_group = [elem]
        current_score = score
# 遍历结束后,把最后一个未存入的组加入结果
if current_group:
    groups.append(current_group)

print(groups)  # 输出结果:[['a', 'b', 'c'], ['d', 'e'], ['f', 'g', 'h']]

解法逻辑说明

  1. 维护两个变量:current_group存储当前正在构建的组,current_score记录当前组的总分;
  2. 逐个遍历l1和l2的对应元素,计算当前元素的分数;
  3. 如果当前元素加入后总分不超过4分,就将其加入当前组并更新总分;
  4. 如果加入后总分超标,就把当前组存入结果列表,然后新建一个组存入当前元素,重置总分;
  5. 遍历结束后,记得把最后一个未存入的组加入结果列表(避免遗漏最后一组)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:15:39