【python】多维列表转换为一维列表(列表扁平化处理)

Python多维列表转为一维列表

①递归

此方法由递归实现!

代码

def expansion(array: list or tuple, result: list or tuple = None) -> list:
    """
    递归实现列表扁平化方法, 调用栈过多可能造成程序性能下降
    :param array:  多维列表
    :param result:  默认参数, 一般不用传
    :return: 返回多维列表展开后的一维列表, 若传入参数 result, 则返回  一维array + result
    """
    if result is None:
        result = []
    for arr in array:
        if type(arr) is list or type(arr) is tuple:
            expansion(arr, result)
        else:
            result.append(arr)
    return result

调用

array_list = [0, [1, 2, 3], [4, 5, 6, [7, 8, 9, ['a', 'b']]], [{"wu": 1}, {"js": 2}], (1, 2)]
print(expansion(array_list))
print(expansion(expansion(array_list, ["这是第一个元素", ["zzz", "ssss"]])))

输出

递归扁平化方法输出结果

②生成器

生成器实现列表扁平化方法,提升性能,适合大并多维度的列表操作

代码 & 调用

def expansion_up(array: list or tuple) -> list:
    """
    生成器实现列表扁平化方法,提升性能,适合大并多维度的列表操作
    :param array: 多维数据
    :return: 返回多维列表展开后的一维列表
    """
    def flatten(items: list or tuple):
        """
        扁平操作, 通过生成器让递归调用编程普通调用
        :param items: ...
        """
        for item in items:
            if type(item) is list or type(item) is tuple:
                yield from flatten(item)
            else:
                yield item

    return [fla for fla in flatten(array)]

print(expansion_up(array_list)) # 调用

输出

生成器扁平化方法输出结果

我将两个方法上传到了 Pypi,现在可以使用 pip install mytools_wjs 进行安装使用
from mytools_wjs import mytools

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值