此方法由递归实现!
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