如何在Python3中提取列表中符合数值顺序的元素生成嵌套列表?
这是个挺有意思的需求,咱们先把规则拆解清楚,再一步步实现:
规则梳理
从你的例子能看出来核心逻辑是这两步:
- 先提取原列表中元素首次出现的顺序序列(你的例子里就是
[1,2,3],因为1最先出现,然后是2,最后是3) - 对这个序列里的每一对相邻元素(比如
(1,2)和(2,3)),生成一个子列表——包含原列表中所有属于这对元素的项,并且严格保留原列表中的顺序 - 把这些子列表组合起来就是最终目标结果
Python 实现代码
list_1 = [1,2,2,3,1,2] # 第一步:获取元素首次出现的有序唯一序列 unique_ordered = [] for num in list_1: if num not in unique_ordered: unique_ordered.append(num) # 此时unique_ordered的值是 [1,2,3] # 第二步:遍历相邻元素对,生成对应子列表 result = [] for i in range(len(unique_ordered) - 1): current_num = unique_ordered[i] next_num = unique_ordered[i+1] # 用集合优化判断效率(列表很大时更明显) allowed_nums = {current_num, next_num} # 收集原列表中符合条件的元素,保留原顺序 sub_list = [num for num in list_1 if num in allowed_nums] result.append(sub_list) print(result) # 输出: [[1,2,2,1,2], [2,2,3,2]]
补充说明
- 如果原列表的首次出现序列更长(比如
[1,2,3,4]),这段代码会自动生成[[1,2,...], [2,3,...], [3,4,...]]这样的嵌套列表,完全适配扩展场景 - 用集合
allowed_nums是为了提升判断效率,当原列表元素数量很多时,num in 集合的速度会比num in 元组快不少
内容的提问来源于stack exchange,提问作者user9342203
相关产品推荐
相关产品推荐

