如何将包含浮点数与子列表的列表展开为单一浮点数列表?
如何将包含浮点数和子列表的混合列表转为单一浮点数列表?
先明确需求:把包含浮点数和子列表的混合列表(示例如下),转换为仅含浮点数的一维列表。
原始列表:
my_list = [1., 2., 4., [4., 5., 6.], 5.]
目标结果:
desired = [1., 2., 4., 4., 5., 6., 5.]
以下是几种实用实现方式:
方法1:递归遍历(支持多层嵌套)
如果你的列表可能存在多层嵌套(比如子列表里还有子列表),递归是最通用的方案:
def flatten_list(lst): result = [] for item in lst: if isinstance(item, list): result.extend(flatten_list(item)) else: result.append(item) return result # 调用示例 my_list = [1., 2., 4., [4., 5., 6.], 5.] flattened = flatten_list(my_list) print(flattened) # 输出: [1.0, 2.0, 4.0, 4.0, 5.0, 6.0, 5.0]
逻辑很简单:遍历每个元素,判断如果是列表就递归展开,否则直接加入结果列表。
方法2:迭代式处理(无递归)
如果不想用递归,也可以用循环手动处理:
def flatten_list(lst): result = [] stack = list(lst) while stack: item = stack.pop() if isinstance(item, list): stack.extend(item) else: result.append(item) # 因为pop是从末尾取,最后要反转回来保证顺序一致 return result[::-1] # 调用示例 my_list = [1., 2., 4., [4., 5., 6.], 5.] flattened = flatten_list(my_list) print(flattened) # 输出: [1.0, 2.0, 4.0, 4.0, 5.0, 6.0, 5.0]
这里用栈模拟递归的展开过程,最后反转结果匹配原列表的元素顺序。
方法3:简洁的列表推导式(结合递归)
如果追求代码简洁,可以用递归+列表推导式的写法:
def flatten_list(lst): return [x for item in lst for x in (flatten_list(item) if isinstance(item, list) else [item])] # 调用示例 my_list = [1., 2., 4., [4., 5., 6.], 5.] flattened = flatten_list(my_list) print(flattened) # 输出: [1.0, 2.0, 4.0, 4.0, 5.0, 6.0, 5.0]
这种写法把展开逻辑压缩到一行,适合偏好简洁代码的场景。
内容的提问来源于stack exchange,提问作者Elena Greg
相关产品推荐
相关产品推荐

