首先声明,这种问题的正统解法是使用numpy
下面是不考虑效率的 通用版本,满足 "python自带" 这个条件, 并且可自定义 过滤条件 与 get函数
import json
import ast
def flat(nest,cond_func=lambda r:type(r)==ast.Num,get_func=lambda r:r.n):
cd = json.dumps(nest)
t = ast.parse(cd)
g = ast.walk(t)
arr = list(g)
arr = list(filter(cond_func,arr))
arr = list(map(get_func,arr))
return(arr)
arr = [1, [4], 2, [3, [5, 6]]]
flat(arr)
# [1, 2, 4, 3, 5, 6]
cubic = [
[[255, 0, 0], [0, 255, 0], [0, 0, 255]],
[[255, 0, 0], [0, 255, 0], [0, 0, 255]],
[[255, 0, 0], [0, 255, 0], [0, 0, 255]]
]
flat(cubic)
#[255, 0, 0, 0, 255, 0, 0, 0, 255, 255, 0, 0, 0, 255, 0, 0, 0, 255, 255, 0, 0, 0, 255, 0, 0, 0, 255]
arr = [1, ["a"], 2, ["b", [5, "c"]]]
flat(arr,cond_func=lambda r:type(r)==ast.Str,get_func=lambda r:r.s)
#['a', 'b', 'c']
本文介绍了一种不依赖numpy的Python自定义方法,用于扁平化复杂数据结构,通过`json`和`ast`模块解析,可灵活设置过滤条件和获取函数。实例演示了如何处理列表嵌套和字符串过滤。
1万+

被折叠的 条评论
为什么被折叠?



