如何将列表拆分为长度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
相关产品推荐
相关产品推荐

