Python如何将嵌套列表中的单元素子列表转移到其他列表
实现方案
方法1:单次遍历拆分(推荐,时间复杂度O(n))
不需要修改原列表,一次遍历即可把两类子列表拆分到不同容器,避免边遍历原列表边删除带来的索引错位问题。
代码示例:
k = [[1,2,3],[2,5,6],[2],[1,7,8,3]] single_elem_list = [] new_k = [] for sub_list in k: if len(sub_list) == 1: single_elem_list.append(sub_list) else: new_k.append(sub_list) # 如果需要直接修改原列表k的话,补充下面这行 k = new_k
运行后结果:
k的值为[[1,2,3],[2,5,6],[1,7,8,3]]single_elem_list的值为[[2]]
方法2:列表推导式实现
如果偏好简洁写法,也可以用两行列表推导式完成:
k = [[1,2,3],[2,5,6],[2],[1,7,8,3]] single_elem_list = [sub for sub in k if len(sub) == 1] k = [sub for sub in k if len(sub) != 1]
该方法会遍历两次列表,适合数据量不大的场景。
注意事项
- 不要直接在遍历原列表
k的同时执行remove/pop操作,会导致后续元素索引前移,出现漏判的问题。 - 如果子列表可能存在非列表类型的元素,判断前可以先加
isinstance(sub_list, list)的校验,避免触发len()报错。
内容的提问来源于stack exchange,提问作者Savannah
相关产品推荐
相关产品推荐

