Python如何对两个非均匀嵌套列表进行逐元素相减运算?
非均匀嵌套列表的逐元素相减实现
给定两个结构一致的非均匀嵌套数值列表:
lst1 = [0.1, [0.2, 0.3], [0.4, 0.5, 0.6, [0.7, 0.8], 0.9]] lst2 = [0.1, [0.1, 0.1], [0.1, 0.1, 0.1, [0.1, 0.1], 0.1]]
需要实现逐元素相减运算,得到目标结果:
[0.1, [0.1, 0.2], [0.3, 0.4, 0.5, [0.6, 0.7], 0.8]]
解决方案:递归处理嵌套结构
由于列表是不均匀嵌套的,我们可以通过递归函数遍历每个元素,根据元素类型做不同处理:如果是列表则递归进入下一层,否则直接执行减法运算。
实现代码如下:
def nested_subtract(a, b): result = [] for x, y in zip(a, b): if isinstance(x, list) and isinstance(y, list): result.append(nested_subtract(x, y)) else: result.append(x - y) return result lst1 = [0.1, [0.2, 0.3], [0.4, 0.5, 0.6, [0.7, 0.8], 0.9]] lst2 = [0.1, [0.1, 0.1], [0.1, 0.1, 0.1, [0.1, 0.1], 0.1]] output = nested_subtract(lst1, lst2) print(output)
运行代码后,输出结果与预期一致:
[0.1, [0.1, 0.2], [0.3, 0.4, 0.5, [0.6, 0.7], 0.8]]
注意事项
- 必须保证两个输入列表的结构完全匹配:每个位置的元素要么都是同层级嵌套的列表,要么都是数值,否则会触发类型错误。
- 浮点数运算存在天然精度问题,比如
0.1这类数值无法被二进制精确表示,若需要高精度计算,可使用Python的decimal模块替代原生浮点数操作。
内容的提问来源于stack exchange,提问作者therickster
相关产品推荐
相关产品推荐

