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

如何将列表拆分为长度2-4的子列表?修正现有函数错误

列表拆分函数的修正方案

原函数的问题在于:

  • 仅在子列表长度达到4,或最后一个元素时长度为2、3才将子列表加入结果,导致剩余的单个元素无法被正确处理(比如9个元素的场景,最后1个元素会被遗漏)。
  • 没有考虑拆分后剩余元素的长度必须落在2-4之间,可能出现无效的短子列表。

以下是满足需求的修正函数:

def split_list(lst):
    n = len(lst)
    # 长度≤3的列表直接作为单个子列表返回,不拆分
    if n <= 3:
        return [lst]
    result = []
    current_idx = 0
    while current_idx < n:
        remaining = n - current_idx
        # 剩余元素数在2-4范围内,直接取全部
        if remaining <= 4:
            result.append(lst[current_idx:current_idx+remaining])
            current_idx += remaining
        else:
            # 剩余元素数>4时优先取4个;若剩余5个则取3个,避免剩下1个无效元素
            take = 3 if remaining == 5 else 4
            result.append(lst[current_idx:current_idx+take])
            current_idx += take
    return result

关键逻辑说明

  • 特殊场景处理:输入列表长度≤3时,直接返回包含原列表的子列表,符合"保持原样不拆分"的要求。
  • 拆分规则:
    • 优先按4个元素拆分,提升拆分效率。
    • 当剩余元素恰好为5个时,改为按3个拆分,确保剩下的2个元素能组成有效子列表,避免出现长度为1的无效子列表。

测试验证

  • 输入["a"]*9,输出为[["a","a","a","a"],["a","a","a"],["a","a"]],符合要求。
  • 输入["a","a"],输出为[["a","a"]],保持不拆分状态。
  • 输入["a"]*5,输出为[["a","a","a"],["a","a"]],所有子列表长度均在2-4之间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:29:56