如何将Python列表切割为含指定数量有效元素的二维列表?
问题分析与解决
先说说你写的代码问题出在哪:
- 内层循环直接遍历整个
myList,每次都把所有元素往子列表里塞,这肯定会重复添加大量元素,完全不符合切割需求。 - 没有从原列表中移除已处理的元素,导致每次循环都从头取元素,根本没法逐步推进切割。
- 提前固定了4个子列表的数量,要是原列表元素数量变化,这种写法就彻底失效了。
你的核心需求是每个子列表排除"skip"和"hop"后,要包含4个有效元素,正确的思路应该是逐个处理原列表元素,动态构建子列表,满足条件就切换到下一个子列表。
正确代码实现
myList = [1,"skip",3,4,"hop",7,6,"9",5,59,3,6,"skip",80,"skip","hop",78,67,827,64,53] result = [] current_sub = [] valid_count = 0 for item in myList: current_sub.append(item) # 统计当前子列表的有效元素数量 if item not in ("skip", "hop"): valid_count += 1 # 有效元素达标时,保存子列表并重置状态 if valid_count == 4: result.append(current_sub) current_sub = [] valid_count = 0 # 处理最后可能剩余的未达标子列表 if current_sub: result.append(current_sub) print(result)
代码说明
- 初始化结果列表、当前子列表和有效元素计数器,用来追踪切割进度。
- 逐个遍历原列表元素:
- 把元素加入当前子列表。
- 如果元素不是"skip"或"hop",就给有效计数器加1。
- 当有效计数器达到4时,把当前子列表存入结果,然后重置当前子列表和计数器,准备下一轮切割。
- 遍历结束后,如果还有未完成的子列表(比如原列表最后剩下不足4个有效元素的情况),也一并加入结果。
运行这段代码就能得到你期望的输出:
[[1, 'skip', 3, 4, 'hop', 7], [6, '9', 5, 59], [3, 6, 'skip', 80, 'skip', 'hop', 78], [67, 827, 64, 53]]
内容的提问来源于stack exchange,提问作者neo18965
相关产品推荐
相关产品推荐

