Python如何将含单元素与子列表的混合列表转换为扁平列表
问题原因
你之前使用的双层列表推导式默认输入列表的所有元素都是可遍历的子列表,遇到独立字符串这类非列表元素时,会直接遍历字符串的单个字符,无法得到预期结果。
实现方案
适配当前单层级嵌套场景
你的现有数据只有独立单个元素、一层子列表的混合结构,不存在更深层嵌套,遍历元素时判断类型分别处理即可:
- 普通循环写法(可读性更强)
regular_list = ["foo",["banana","apple"], "banana", ["peaches","grapes"]] flat_list = [] for item in regular_list: if isinstance(item, list): flat_list.extend(item) else: flat_list.append(item)
- 列表推导式写法
flat_list = [elem for item in regular_list for elem in (item if isinstance(item, list) else [item])]
两种写法运行后输出结果和预期完全一致:["foo","banana","apple", "banana", "peaches","grapes"]
适配多层级嵌套通用场景
如果后续数据可能出现子列表嵌套子列表的情况,可以通过递归实现通用扁平化逻辑:
def flatten_list(input_list): result = [] for item in input_list: if isinstance(item, list): result.extend(flatten_list(item)) else: result.append(item) return result # 调用示例 flat_list = flatten_list(regular_list)
注意:不要通过「判断元素是否可迭代」做分支逻辑,字符串本身属于可迭代对象,会被误拆分为单个字符,使用
isinstance(item, list)判断类型更稳妥。
内容的提问来源于stack exchange,提问作者star_it8293
相关产品推荐
相关产品推荐

