如何按指定条件将列表元素划分为子列表?
列表拆分规则实现求助
原始列表:
a = [3, 2, 1, 2, 3, 1, 3, 1, 2]
拆分要求:
- 将以1开头的连续元素段划分为子列表(段内元素从1开始,到下一个1出现前结束;即使段内没有包含1到N(此处N=3)的所有数字,仍需作为一个子列表)
- 所有非1开头的单个元素,单独划分为子列表
期望输出:
b = [[3], [2], [1, 2, 3], [1, 3], [1, 2]]
你当前的尝试代码存在明显错误:a[i]是列表中的单个元素,不存在a[i][0]的索引,且逻辑无法实现需求。以下是正确的实现代码:
a = [3, 2, 1, 2, 3, 1, 3, 1, 2] b = [] current_segment = [] for num in a: if num == 1: # 若存在未提交的1开头段,先提交到结果 if current_segment: b.append(current_segment) current_segment = [] # 开始收集新的1开头段 current_segment.append(num) else: if current_segment: # 正在收集1开头段,直接加入当前段 current_segment.append(num) else: # 非1元素且不在收集状态,单独作为子列表加入 b.append([num]) # 提交最后一段未完成的1开头段 if current_segment: b.append(current_segment) print(b) # 输出符合期望的结果
代码逻辑说明
- 用
current_segment临时存储正在收集的以1开头的连续元素段 - 遍历原始列表时:
- 遇到1则开启新的收集段,若之前有未提交的段先提交给结果列表
- 非1元素如果处于收集状态则加入当前段,否则单独成子列表
- 遍历结束后,将最后一段未提交的收集段加入结果
内容的提问来源于stack exchange,提问作者Rasec Malkic
相关产品推荐
相关产品推荐

